【MVC框架】——View和Controller之間的傳值
阿新 • • 發佈:2019-02-13
在MVC中,Controller執行一個可以說是路由功能,它通過View傳過來的資料,來決定應該呼叫哪一個Model,同樣會把Model處理完的資料傳給View,所以就總是涉及到Controller和View的傳值,那麼它們之間是怎麼傳值的呢?
Controller向View傳值
1、使用ViewBag
Controller
<span style="font-family:KaiTi_GB2312;font-size:18px;">public ActionResult Index() { ViewBag.Message = "歡迎使用 ASP.NET MVC!"; return View(); }</span>
View
<span style="font-family:KaiTi_GB2312;font-size:18px;">@{
ViewBag.Title = "主頁";
}
<h2>@ViewBag.Message</h2>
<p>
若要了解有關 ASP.NET MVC 的更多資訊,請訪問 <a href="http://asp.net/mvc" title="ASP.NET MVC 網站">http://asp.net/mvc</a>。
</p></span>
ViewBag傳過來的Message資訊將會傳遞給<h2>@ViewBag.Message</h2>,所實現的效果就是
2、使用ViewData
Controller
<span style="font-family:KaiTi_GB2312;font-size:18px;">public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
} </span>
View
所實現的效果是相同的。<span style="font-family:KaiTi_GB2312;font-size:18px;"> <h2><%=Html.Encode(ViewData["Message"])%></h2> <p> 若要了解有關 ASP.NET MVC 的更多資訊,請訪問 <a href="http://asp.net/mvc" title="ASP.NET MVC 網站">http://asp.net/mvc</a>。 </p></span>
3、使用TempData
Controller
<span style="font-family:KaiTi_GB2312;font-size:18px;">public ActionResult Index()
{
TempData["Message"] = "Welcome to ASP.NET MVC!";
return View();
} </span>
View
<span style="font-family:KaiTi_GB2312;font-size:18px;">
<h2><%=Html.Encode(TempData["Message"])%></h2>
<p>
若要了解有關 ASP.NET MVC 的更多資訊,請訪問 <a href="http://asp.net/mvc" title="ASP.NET MVC 網站">http://asp.net/mvc</a>。
</p></span>
4、使用Model
Controller
<span style="font-family:KaiTi_GB2312;font-size:18px;">public ActionResult ModelDemo()
{
User u= new User() { UserName="li", Password="abcde" };
return View(u);
} </span>
View
<span style="font-family:KaiTi_GB2312;font-size:18px;"><p>
<%User u = (User)ViewData.Model;%>
UserName:
<%= Html.Encode(u.UserName) %>
</p>
<p>
Password:
<%= Html.Encode(u.Password) %>
</p> </span>
下面介紹四種方法的不同點:
ViewData是Key/Value字典集合,在MVC1中就有了,ViewData傳值比ViewBag要快;ViewBag是dynamic型別物件,從MVC3才開始出現,比ViewData傳值慢,但是可讀性好。
ViewData只能用於當前Action中,而TempData類似於Session,可以跨Action進行訪問,一般用於儲存錯誤資訊。
Model傳遞強型別,所以在建立檢視時,需要建立強檢視。
View向Controller傳值
1、通過Request.Form讀取表單資料
View
<span style="font-family:KaiTi_GB2312;font-size:18px;"><% using (Html.BeginForm("ActionName", "ControllerName"))
{ %>
UserName:<% Html.TextBox("UserName"); %>
Password:<% Html.TextBox("Password"); %>
<%} %>
</span>
Controller
<span style="font-family:KaiTi_GB2312;font-size:18px;">[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ActionName()
{
string username = Request.Form["UserName"];
string password = Request.Form["Password"];
return View();
}
</span>
2、通過FormCollection讀取表單資料
View
<span style="font-family:KaiTi_GB2312;font-size:18px;"><% using (Html.BeginForm("ActionName", "ControllerName"))
{ %>
UserName:<% Html.TextBox("UserName"); %>
Password:<% Html.TextBox("Password"); %>
<%} %></span>
Controller
<span style="font-family:KaiTi_GB2312;font-size:18px;">[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ActionName(FormCollection formCollection)
{
string username = formCollection["UserName"];
string password = formCollection["Password"];
return View();
}
</span>
總結
頁面傳值會用到各種方法,那麼頁面和控制器間的傳值同樣會有很多方法。View和Controller傳值是不可避免的,熟練掌握它們之間的傳值方法,有利於更流利的開發。