MVC中控制器和视图之间的三种数据传递方式总结:
1、ViewData
只能在一个动作方法中设置,在相关的视图中获取,只对当前视图有效。
使用方法:
model中:ViewData["test"] = "test";
XX.apsx中:<%=Html.Encode(ViewData["test"]) %> 或者 <%: ViewData["Message"] %>
2、TempData
可以在多个方法或者多个页面中设置、读取。TempData只能在控制器中传递一次,每个元素只能被访问一次,访问后被删除。
TempData实质上是保存在session中,每次读取都是从session中获取并删除。
使用方法:
model中:TempData["TMessage"] = "测试TempData";
XXaspx中:<%: TempData["TMessage"] %>
3、model传递
model传递数据可以解决强类型数据传递。通过view()方法传递实例化对象到视图中。
model:var model = new uerList {new user{name ="name1",age="12"},new user{name="name2",age="23"}};
return View(model);
XXaspx:<% foreach item in model {%>
处理
<%}%>
SP:
传递多个数据对象的方法:
创建一个类,将多数据组合进新类中,在model中传递新类的实例即可。
model: NewClass nc = new NewClass();
nc.names= userlist;
nc.salys = salysList;
return View(nc);
XXaspx:<% foreach item in model.names {%>
处理
<%}%>
-----------------------------------------------------------------------------------------------
MVC中,将视图中的数据传递到控制器主要是通过发送表单实现的。
视图数据实例:
<%
using
(Html.BeginForm(
"RequestForm"
,
"Home"
))
{ %>
name:
<%: Html.TextBox(
"Name"
)%>
age:
<%: Html.TextBox(
"Age"
)%>
<input type=
"submit"
name=
"submit"
value=
"RequestForm"
/>
<% } %>
|
1、Request.Form
model中用法:
[AcceptVerbs(HttpVerbs.Post)]
public
ActionResult RequestForm()
{
user u =
new
user();
u.Name = Request.Form[
"Name"
];
u.Age = Request.Form[
"Age"
];
return
RedirectToAction(
"Index"
);
}
|
2、FormCollection
model中用法:
[AcceptVerbs(HttpVerbs.Post)]
public
ActionResult RequestForm(FormCollection fc)
{
user u =
new
user();
u.Name = fc[
"Name"
];
u.Age = fc[
"Age"
];
return
RedirectToAction(
"Index"
);
}
|
3、直接读取表单数据对象
model中用法:
[AcceptVerbs(HttpVerbs.Post)]
public
ActionResult RequestForm(user u)
{
return
View(u);
}
|