“返回视图()”和“返回PartialView()”有什么区别

我明白,部分视图是用来渲染视图的一部分。 但我不明白什么是return View()return PartialView()之间的区别,你什么时候使用每一个。

返回View() – 呈现.aspx | .cshtml页面

  • 呈现一个正常的.aspx页面,也可以包含部分视图

返回PartialView() – 渲染.ascx | .cshtml控件

  • 将可以通过AJAX请求或非AJAX请求请求的HTML片段呈现给浏览器。

View()返回ViewResult PartialView()返回从ViewResultBaseinheritance的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