“返回视图()”和“返回PartialView()”有什么区别
我明白,部分视图是用来渲染视图的一部分。 但我不明白什么是return View()
和return PartialView()
之间的区别,你什么时候使用每一个。
返回View()
– 呈现.aspx | .cshtml页面
- 呈现一个正常的.aspx页面,也可以包含部分视图
返回PartialView()
– 渲染.ascx | .cshtml控件
- 将可以通过AJAX请求或非AJAX请求请求的HTML片段呈现给浏览器。
View()返回ViewResult
PartialView()返回从ViewResultBase
inheritance的PartialViewResult
不同之处在于下面的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; } } }
返回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
控制器操作通常在使用AJAX时返回PartialView,并执行由局部视图表示的页面区域的更新。 使用部分视图的正常方法就是在主视图中调用Html.RenderPartial
。