据我所知,部分视图用于渲染视图的各个部分。但我无法理解return View()
和return PartialView()
之间的区别是什么,以及何时使用每一个。
答案 0 :(得分:26)
返回View()
- 呈现.aspx | .cshtml页面
返回PartialView()
- 渲染.ascx | .cshtml控件
View()返回ViewResult
PartialView()返回PartialViewResult
都继承自ViewResultBase
差异由下面的Reflector描述......
public class PartialViewResult : ViewResultBase
{
// Methods
protected override ViewEngineResult FindView(ControllerContext context)
{
ViewEngineResult result = base.ViewEngineCollection.FindPartialView(context, base.ViewName);
if (result.View != null)
{
return result;
}
StringBuilder builder = new StringBuilder();
foreach (string str in result.SearchedLocations)
{
builder.AppendLine();
builder.Append(str);
}
throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_PartialViewNotFound, new object[] { base.ViewName, builder }));
}
}
public class ViewResult : ViewResultBase
{
// Fields
private string _masterName;
// Methods
protected override ViewEngineResult FindView(ControllerContext context)
{
ViewEngineResult result = base.ViewEngineCollection.FindView(context, base.ViewName, this.MasterName);
if (result.View != null)
{
return result;
}
StringBuilder builder = new StringBuilder();
foreach (string str in result.SearchedLocations)
{
builder.AppendLine();
builder.Append(str);
}
throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_ViewNotFound, new object[] { base.ViewName, builder }));
}
// Properties
public string MasterName
{
get
{
return (this._masterName ?? string.Empty);
}
set
{
this._masterName = value;
}
}
}
答案 1 :(得分:16)
返回PartialView()返回HTML代码片段,它与ViewUserControls - ASCX文件一起使用。使用“返回PartialView()”的主要优点是,当您不想呈现所有其他HTML页面内容时,例如HTML,BODY,HEAD标记。
我最常见的用途之一是当我想根据对动作的请求是否是AJAX调用来呈现用户控件时。
所以我有一个名为MyControl.aspx的视图,我在其中使用RenderPartial HTML帮助器,我有一个名为MyControl.ascx的部分视图,我在那里进行实际渲染。
我可以在我的控制器动作中切换这两个:
if (Request.IsAjaxRequest())
return PartialView("MyControl"); // this renders MyControl.ascx
return View(); // this render MyControl.aspx
答案 2 :(得分:2)
当使用AJAX时,控制器动作通常返回PartialView,并且执行由局部视图表示的页面区域的更新。使用部分视图的常规方法是在主视图中调用Html.RenderPartial
。