|
使用强类型类来传递视图数据,有如下好处(来自于scrottgu): 1.避免使用字符串来查询对象,得到对你的控制器和视图代码的编译时检查 2.避免需要在使用象c#这样的强类型语言中明确转换viewdata对象字典中的值 3.在你的视图网页的标识文件以及后台代码文件中得到你的viewdata对象的自动代码intellisense 4.可以使用代码重构工具来帮助自动化对整个应用和单元测试代码库的改动 使用ViewData字典来传递数据
在Controller基类中,有一个这样的字典定义:
public IDictionary<string, object> ViewData { get; }
这样我们可以直接把视图数据通过ViewData字段来传递,如下示例代码:
[ControllerAction]
public void Index()
{
BlogRepository repository = new BlogRepository();
List<Post> posts = repository.GetAll();
List<Category> categories = repository.GetAllCategory();
ViewData["posts"] = posts;
ViewData["categories"] = categories;
RenderView("Index");
}
在试图中,可以这样来获取视图数据:
<div>
<%foreach (Post post in (ViewData["posts"] as List<Post>))
{ %>
<div class="postitem">
<strong>Title</strong>:<%=Html.Encode(post.Title) %></br>
<strong>Author</strong>:<%=Html.Encode(post.Author) %></br>
<strong>PubDate</strong>:<%=Html.Encode(post.PubDate.ToShortDateString()) %></br>
<strong>Content</strong>:<%=Html.Encode(post.Description) %></br>
<%=Html.ActionLink("Edit", new {action="Edit", Id=post.Id })%>
</div><br />
<% } %>
</div>
处理未知的Action
Controller类中包含了一个HandlerUnknownAction的方法:
protected internal virtual void HandleUnknownAction(string actionName); 它用来处理一些未知的Action,默认情况下将返回HTTP 404错误,如果想自定义该处理,可以覆写该方法:
[ControllerAction]
protected override void HandleUnknownAction(string actionName)
{
if (ShouldShowSearch(action) == true)
{
RedirectToAction("search", new { query = action });
return;
}
base.HandleUnknownAction(actionName);
}
它用来处理当出现未知的Action时,跳转向Search Action。 (责任编辑:admin) |





骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价