在asp.net2.0的网页开发模式下,我们一般通过直将访问页面控件, 将值写入到页面, 但在Asp.net MVC模式下,已不能在Controller中再去访问页面控件了,要如何才能给View页面传值呢?在Controller中有两个字典(ViewData和TempData)来实现View之间的值传递,Controller通过ViewData,TempData传通到ViewResult中, 然后再由ViewResult传递到ViewPage中来实现值传递的。
- public ActionResult Index()
- {
- ViewData["Message"] = "Welcome to ASP.NET MVC!";
- return View();
- }
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
总结:
1. ViewData与TempData方式是弱类型的方式传递数据,而使用Model传递数据是强类型的方式。
2. ViewData与TempData是完全不同的数据类型,ViewData数据类型是ViewDataDictionary类的实例化对象,而TempData的数据类型是TempDataDictionary类的实例化对象。
3. TempData实际上保存在Session中,控制器每次执行请求时都会从Session中获取TempData数据并删除该Session。TempData数据只能在控制器中传递一次,其中的每个元素也只能被访问一次,访问之后会被自动删除。
4. ViewData只能在一个Action方法中进行设置,在相关的视图页面读取,只对当前视图有效。理论上,TempData应该可以在一个Action中设置,多个页面读取。但是,实际上TempData中的元素被访问一次以后就会被删除。
Name:<%= Html.TextBox("name") %>
Name:<%= Html.TextBox( "name", ViewData[ "Nm"]) %>
- <form name="form1" action="/Home/Index" method="post">
- Name:<input type="text" name="name" /><br />
- Sex: <input type="text" name="sex" />
- <input type="submit" value="submit" />
- </form>
- <%
- if (ViewData["name"] != null)
- {
- Response.Write("your name is:" + ViewData["name"] + ", your sex is:" + ViewData["sex"]);
- }
- %>
- :
- public ActionResult Index(string name, string sex)
- {
- ViewData["Message"] = "Welcome to ASP.NET MVC!";
- ViewData["name"] = name;
- ViewData["sex"] = sex;
- return View();
- }
- public ActionResult Index()
- {
- ViewData["Message"] = "Welcome to ASP.NET MVC!";
- ViewData["name"] = Request.Form["name"];
- ViewData["sex"] = Request.Form["sex"];
- return View();
- }
- public ActionResult Index(FormCollection form)
- {
- ViewData["Message"] = "Welcome to ASP.NET MVC!";
- User u=new User();
- u.Name = form["Name"];
- u.Password = form["Password"];
- return View(u);
- }
- public ActionResult ModelDemo()
- {
- User u= new User() { UserName="li", Password="abcde" };
- return View(u);
- }
- <p>
- <%User u = (User)ViewData.Model;%>
- UserName:
- <%= Html.Encode(u.UserName) %>
- </p>
- <p>
- Password:
- <%= Html.Encode(u.Password) %>
- </p>
-
我们知道在asp.net mvc3中controller一次只能传一个model给页面,但是有时候我们的需求需要我们传多个model给view。这个时候怎么办呢。。。
我没有找到可以传给view超过一个model的方法,但是我们可以变通下,为你要传的几个model新建一个类,这样就可以将你要传的数据全部包含到这个类中,然后将这个大model传给view。简单点说就是:用一个大model包含很多个小model,然后将大model传给view。自定义数据模型用来包含多个表中的属性。