Html.RenderPartial与PartialView
部分视图PartialView,其实就是一个后缀名称为.ascx的UserControl,在完整视图中用Html.RenderPartial,同时还可以用js来刷新局部视图.
在完整视图中的呈现
Html.RenderPartial(string partialName);
Html.Renderpartial(string partialName,object model);
Html.RenderPartial(string partialName,ViewDataDictionary viewData);
Html.RenderPartial(string partialName,object model,ViewDataDictionary viewData);
RenderPartial函数直接加载局部试图,并且把数据传递到局部试图,可以没有Controller.
PartialView的Controler
通过UrlRoute定位到Controler->Action在Action中指定PartialView,控制权在Controler中.
mvc中的ascx视图可以独立的被访问,不要求必须在完整视图中。
但是有没有一个空间通过Controler->Action->PartialView 的过程在完整视图中展示内容呢?通过下面的异步加载方式是可以的。
通过浪费一个http连接显示结果貌似不值。
PartView的异步加载
1.首先创建一个PartialView,其实就是一个UserControl
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Web.Models.BlogItem>>" %>
<table>
<tr>
<th>Ttile</th>
<th>Author</th>
<th>Details</th>
<th>Time</th>
</tr>
<%foreach (var item in Model) { %>
<tr>
<td><%= Html.Encode(item.Title) %></td>
<td><%= Html.Encode(item.Author) %></td>
<td><%= Html.Encode(item.Details) %></td>
<td><%= Html.Encode(item.Time) %></td>
</tr>
<% } %>
</table>
2.Action代码
[Authorize]
public ActionResult Blog(string id){
var blogs = new Models.BlogItem[]{
new Models.BlogItem(){
Title="评论标题",Details="我的评论",Author="陈希章",Time=DateTime.Now},
new Models.BlogItem(){
Title="评论标题",Details="我的评论",Author="陈希章",Time=DateTime.Now},
new Models.BlogItem(){Title="评论标题",Details="我的评论",Author="陈希章",Time=DateTime.Now},
new Models.BlogItem(){Title="评论标题",Details="我的评论",Author="陈希章",Time=DateTime.Now},
new Models.BlogItem(){Title="评论标题",Details="我的评论",Author="陈希章",Time=DateTime.Now}
};
return PartialView("BlogView", blogs);
}
3.异步加载
$("#blog").load(action + key);