“return View()”和“return PartialView()”之间的区别是什么?

时间:2010-04-18 12:51:29

标签: asp.net-mvc

据我所知,部分视图用于渲染视图的各个部分。但我无法理解return View()return PartialView()之间的区别是什么,以及何时使用每一个。

3 个答案:

答案 0 :(得分:26)

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

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

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

  • 将一段HTML呈现给浏览器,可以通过AJAX或非AJAX请求等方式请求。

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