【问题标题】:Any difference in "return View()" and "return PatialView()" still in MVC 3“return View()”和“return PatialView()”的任何区别仍在 MVC 3 中
【发布时间】:2013-10-03 15:04:10
【问题描述】:

所以有人问我这个问题:

什么时候返回 View(),什么时候返回 PartialView()?

我的直接反应是,如果这是一种自私的使用PartialView()。然后我意识到我经常返回View() 以获得没有明显不利影响的部分视图?!那么return PartialView() 调用的意义何在?

我发现了这个问题What's the difference between “return View()” and “return PartialView()”。这似乎是 MVC2 特有的。即谈论.aspx.ascx 控制扩展。使用 Razor,我们所有的视图都是 .cshtml,无论它们是否是局部的。

我想到的是 PartialView() 只是 MVC2 的后遗症,与 MVC3+ 无关(无论如何使用 Razor 时)?还是我错过了PartialView() 的一些重要功能?

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-mvc-3 razor partial-views


【解决方案1】:

tl;dr: PartialView() 不为返回的视图使用布局。


您可以在_ViewStart.cshtml(位于Views 文件夹中)中设置默认布局文件,然后所有视图都将使用该文件。通过这样做,您可以避免在每个视图中设置 Layout 属性。 PartialView() 不会包含该布局文件或任何其他文件。

如果您想返回部分视图,例如在使用@Html.Action(action, controller) 调用的子操作中,使用PartialView。如果要返回包含布局的“完整”视图,请使用View()

【讨论】:

  • 并没有真正回答我的问题。我的布局通常在视图中声明。我没有理由明白为什么我不能返回View 以获得@Html.Action?如果我这样做,什么都不会破坏?
  • @Liam 您在问题中没有提到@Html.Action,所以我指出了两种处理布局文件的方法的区别。
  • 或者我错过了 PartialView() 的一些关键功能?,是的。视图应该知道它们正在使用什么布局,否则它们不是re-usable
【解决方案2】:

MSDN 参考:

如果您将 ViewResult() Object 的 MSDN 定义与 PartialViewResult() Object 的 MSDN 定义进行对比

你发现唯一的区别是 ViewResult 有一个额外的属性:

public string MasterName { get; set; }

否则,这两个对象都从ViewResultBase 继承,并且似乎从基类继承了所有其他属性和方法。

很遗憾,抽象方法ExecuteResult()的实现没有公布,但我毫不怀疑它使用MasterName字段来查找和渲染Master Layer。


我们的共同经历:

和你一样,我返回了部分视图 = 使用 View()。我不推荐它。但表面上的差异并不大。

为 MasterName 增加一个对象似乎有点浪费,但更重要的区别可能是 ExecuteResult() 的实现。

当您选择View() 方法并创建ViewResult 对象而不是使用PartialView() 创建PartialViewResult 对象时,您的效率会降低;您的应用程序正在检查您的 MasterName 字段是否已分配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2014-03-24
    • 2014-05-01
    • 2014-05-24
    • 2011-08-26
    相关资源
    最近更新 更多