test - 2008-3-12 17:39:00
ViewData与TempData属性来向View页传递对象
上文中已经提到,使用ViewData可以将数据由Controller传递到View
在前文中我们建立了EiceController类
在本文的示例中我们将这个Controller改一下
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
/**////
/// 记不记得前面讲过的,所有Controller都要继承于
/// Controller类当然Controller有很多种,我们慢慢讲
///
public class EiceController : Controller
{
public void Index() {
ViewData["ViewData"] = "在这里显示ViewData";
TempData["TempData"] = "在这里显示TempData";
RenderView("Index");
}
public void Index2() {
RenderView("Index");
}
}
}
我们将Index的参数移除,并提供了ViewData和TempData的赋值
在Views/Eice/Index.aspx这个View中我们写以下代码
1:<%=ViewData["ViewData"]%><br />
2:<%=TempData["TempData"]%>
注意上面的1.2不是行号...
接下来我们运行工程
访问http://localhost/Eice/Index
可以看到运行得到以下
1.在这里显示ViewData
2.在这里显示TempData
再访问http://localhost/Eice/Index2
显示结果为
1.
2.在这里显示TempData
这里1显示是的ViewData中的内容,2为TempData传递的内容
我们可以看到
ViewData只能在本Action中有效
但是TempData可以类似于Session一样到其它页面仍然存在,但只限一页的访问(类似于Monorail中的Flash)
TempData一般用于临时的缓存内容或抛出错误页面时传递错误信息
Redirect方法跳转页面到其它的Controller/Action
RedirectToAction(Action名);
RedirectToAction(Action名, Controller名);
RedirectToAction(RouteValueDictionary);
在这里前两种都没有什么好说的RedirectToAction("About","Home");就是一种写法
主要是第三种重载
用户可以这样写
System.Web.Routing.RouteData routeData =
new System.Web.Routing.RouteData();
routeData.Values.Add("Action", "About");
routeData.Values.Add("Controller", "Home");
RedirectToAction(routeData.Values);
这样就可以完成页面跳转
当然,也可以使用传统的Response.Redirect来完成页面的跳转
test - 2008-3-12 17:40:00
我们前面都使用RenderView("Index");这种方式来显示
RenderView的重载:
RenderView(string viewName);
RenderView(string viewName, object viewData);
RenderView(string viewName, string masterName);
RenderView(string viewName, string masterName, object viewData);
我们常用的当然就是第一种
第二种RenderView(string viewName, object viewData);是在显示view时附加一个ViewData
如:
RenderView("Index", new
{
name = "重典",
sex = true
});我们就可以在相应的View(即Index.aspx)中调用<%=ViewData["name"]%>来得到它的值
RenderView(string viewName, string masterName);
则是除了Viewname之外还指定了母板页
如果程序写为
RenderView("index", "layoutpage");则是显示index这个View , 但是母板页使用/Views/Shared/layoutpage.master
最后一个重载是前两者的结合,这里不多说了
更多的View传值方式
前面说了向VIew传值可以用ViewData或者是TempData
这里我们介绍ViewData传值的另一种的方式
与Models绑定
这是我们第一次介绍Models,其实Models就是一个数据模型,比如,用户,人,访问记录等
我们建立一个Person类
namespace MvcApplication2.Models
{
public class Person
{
string _name;
public string Name {
get { return _name; }
set { _name = value; }
}
bool _sex;
public bool Sex {
get { return _sex; }
set { _sex = value; }
}
}
}类中有Name与Sex两个属性
我们仍然用Eice的Index这个Action来书写示例
首先我们实例化一个Person并将之传给View
Person p = new Person()
{
Name = "邹健",
Sex = true
};
RenderView("Index", p);接下来我们更改View中Eive/Index.aspx.cs
将它的更改如下
public partial class Index : ViewPage<Person>
{
}也就是原来Index是继承ViewPage的而现在继承了ViewPage<Person>这个泛型
接下来我们可以在Index.aspx中写类似以下语句了
<%=ViewData.Name %>
<%=ViewData.Sex %>当然您也可以不写ViewPage<Person>而还像从前一样继承于ViewPage
那么访问方法就是过去的
<%=ViewData["Name"] %>
<%=ViewData["Sex"] %>
darko2o8 - 2008-5-14 15:37:00
学习: