ASP.NET MVC 入门 5 View与ViewData 最后讲解
来源:互联网 发布:mysql分页优化 编辑:程序博客网 时间:2024/05/13 20:59
{
ViewData["Title"]= BlogSettings.Instance.Name;
List<IPublishable> posts= BlogEngine.Core.Post.Posts
.ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return pas IPublishable; }));
int pageIndex= (id!= null && id.HasValue&& id.Value> 0)? id.Value :1;
int pageSize= Math.Min(posts.Count, BlogSettings.Instance.PostsPerPage);
if ((pageIndex- 1)* pageSize + pageSize> posts.Count)
{
return ShowMsg(new List<string>() { "页码超出范围" });
}
posts = posts.GetRange((pageIndex- 1)* pageSize, pageSize);
ViewData["Posts"]= posts;//向ViewData中传数据
//这里返回View给客户端,如果不指定要返回的View的名称,
//就是返回和Action同名的View,
//也就是相当于return View("Index");
return View();
}
默认的WebFormView搜索View的顺序是按如下顺序搜索的:
其中{1}为ControllerName,{0}为ActionName。MasterLocationFormats为母版页的搜索顺序。
在上面的代码中我们使用ViewData["Posts"]向View页面传递数据,然后我们就可以在View中取出数据并呈现给用户,Views/Home/Index.aspx页面的部分代码如下:
如上红色框中的代码,我们可以从ViewData中取出数据,并转换为相应的类型。在这里我们发现ViewData要做一个类型的转换,其实我们可以将ViewData.Model设置为强类型,只需将我们的View页面继承自ViewPage<TModel>就可以了:
然后在Controller里面return View()的时候直接给ViewData.Model传值,如下所示:
然后在View中我们可以直接从强类型的ViewData.Model中取值:
由上面的代码我看可以看出ViewData.Model就是List<IPublishable>类型,并不需要再进行类型的转换。
ViewData还有一个Eval的方法,我们可以使用这个方法从ViewData中取值。假如我么在Action中使用return View(Post);给View传递一篇日志的数据。而Post有一个Previous的属性指向前一篇日志,则我们可以在View页面中可以这样来取值:<%= ViewData.Eval("Previous.Title")%>
但是如果使用我最后提供的示例Blog程序的代码这样在取值的时候直接在里面使用"."来取值,你会发现取不了值。因为BlogEngine里面的BusinessBase类实现了IDataErrorInfo接口,而IDataErrorInfo有一个索引器,也就是说BusinessBase有一个索引器,就因为有一个索引器,使Eval中不能用点来取值(不知道是不是bug?)。
补充:上面说到的不是Bug,是因为BusinessBase实现了IDataErrorInfo接口,该接口有个索引器,导致ViewData.Eval()方法调用时搜索索引器的值时返回String.Empty而使ViewData.Eval()认为是找到值了,从而失效。
我们可以将return string.Empty修改为return null,这样就可以了。
- ASP.NET MVC 入门 5 View与ViewData 最后讲解
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门 -- 5、View与ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 入门4 View与ViewData
- ASP.NET MVC 入门 5 View与ViewData(接着上一篇)
- ASP.NET MVC 入门 5 View与ViewData(这里的知识点很多,看了半天还是有些模糊)
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Asp.net MVC中的ViewData与ViewBag
- Python 2.5安装simplejson
- 使用header头设置缓存控制头Cache-control
- 算法竞技赛入门经典 11.1.1 无根树转化为有根树
- 设置浏览器标题闪烁
- signal函数异常处理
- ASP.NET MVC 入门 5 View与ViewData 最后讲解
- 程序员:伤不起的三十岁
- Emacs正则表达式的小括号
- IIS 应用程序池自动关闭的解决办法
- 从程序员到项目经理(1)
- listview改变选中行字体颜色
- 找出两个链表的第一个公共结点
- 1>&2 and 2>&1
- 新建分组并且批量添加联系人 在三星S2上测试成功