ViewData与TempData属性来向View页传递对象
上文中已经提到,使用ViewData可以将数据由Controller传递到View
在前文中我们建立了EiceController类
在本文的示例中我们将这个Controller改一下
namespace MvcApplication2.Controllers


{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

/**//// <summary>
/// 记不记得前面讲过的,所有Controller都要继承于
/// Controller类
当然Controller有很多种,我们慢慢讲
/// </summary>
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来完成页面的跳转
Asp.net Mvc Framework 系列
posted @ 2008-03-11 17:18
重典 阅读(2499)
评论(25) 编辑 收藏 网摘 所属分类:
ASP.NET MVC
发表评论
#2楼[
楼主]2008-03-12 08:52 |
@appl
简单的服务器端控件在Asp.netMvc上使用不会出错,但是无法像在WebForm中一样方便使用
控件的初始化这以这样进行
可以在View的cs文件中重写OnPreInit(EventArgs);
Render(HtmlTextWriter);
RenderView(ViewContext;
或
SetViewData(object);
在这里为服务器端控件赋值
复杂的服务器端控件还没有办法使用
只有少量控件值得用,其他的会破坏来之不易的对html的控制权,还是放弃为好啊。
#4楼[
楼主]2008-03-12 11:28 |
@第一控制.NET
同意,只是许多的Asp.net的程序员,特别是没有接触过Asp传统编程以及没有Web标准概念的朋友,对控件有着一定的依赖
还要很长时间来过渡啊
恩 看来终于到了抛弃服务器空间的时候了
重典有时间还是做个sample吧 比如做个留言板?
ps:现在项目中能使用这个了吗 可惜还是p2 正式版的时候会不会改动很多
#6楼[
楼主]2008-03-12 18:18 |
@隨風.NET
虚拟主机 服务器也可以支持它这个没关系,我有一篇写在.net2.0下运行的,您可看一下
Sample等我写完那几个Helper的吧,要不初学者也会一头雾水的
现在项目中还在用Monorial,毕竟这个还不太成熟,等正式发布了再用在程序里吧
至于正式版会不会改动很多....我想应该会因为Preview看去的确有很多不成熟的地方,应该可以改进
@重典
是否要必须iis7 iis6的话要设置的吧 这样虚拟主机不就不行了?
既然正式版会改进不少的话 那你的help怎么不到发了正式版再写呢?
#8楼[
楼主]2008-03-12 20:16 |
#10楼[
楼主]2008-03-13 11:15 |
@隨風.NET
IIS6还是不够强大,只能将就了
我想问下...用了这个东西以后是不是代码都写在Controller里
而 Views 里是HTML ??
#12楼[
楼主]2008-03-13 16:40 |
@miao~
基本如此
但也有变通,一切都是为了实现而服务,所以不要因为某种约定而固步自封
我非常期待正式版的MVC Framework,
放弃服务器控件挺好的,服务器控件的运行效率真的不敢恭维!
重典兄
这里说的TempData只能在一个页面的访问是什么意思呢?它和Session有什么区别?
#15楼[
楼主]2008-07-30 17:34 |
@孤独客
它是按访问过期的,
就是虽然是 存在于SESSION的,但是还是要计算访问的页面
Monorail的Flash是和tempdata一样效果的,它可以存储三次页面跳转
重典兄
TempData 可否设置页面跳转的存储次数呢??
另外
我要判断表单输入的准确性,用以下方法
=================================
TempData["ErrorMessage"] = "请填写标题";
return RedirectToAction("New");
=================================
这样做,我只是没有写标题,然后我写好的内容等其他TextBox里面的内容也会因为重新RedirectToAction而清空,有没有什么好的解决方法呢??
#18楼[
楼主]2008-08-30 17:08 |
@勇敢的兽
在绑定时不使用ViewData["xxx"]=obj
而使用ViewData.Model绑定,即View(obj);
错误页不RedirectToAction而直接view并将相应的数据传入
#19楼[
楼主]2008-08-30 17:09 |
@勇敢的兽
可以自定义tempdata
#20楼[
楼主]2008-08-30 17:55 |
@重典
只要实现ITempDataProvider接口就行
pv5里自定义了一个 CookieTempDataProvider是存在Cookie里的
能否在一个页面里面实现多个controller里面的多个action呢?
#23楼[
楼主]
2009-06-13 15:08 |
@天堂口
RenderAction就好了,后面有讲到