"返回View()"和"返回PatialView()"仍然存在于MVC 3中的任何差异

Lia*_*iam 4 asp.net asp.net-mvc partial-views razor asp.net-mvc-3

所以有人问我这个问题:

我何时会返回View()以及何时返回PartialView()?

我的不懈反应是,如果它是一个空间使用PartialView().然后我意识到我经常返回View()部分视图,没有明显的,有效的影响?!那么return PartialView()电话中有什么意义呢?

我发现这个问题"return View()"和"return PartialView()"之间有什么区别.这似乎是MVC2特有的.即谈论.aspx.ascx控制扩展.使用Razor我们所有的观点都是.cshtml它们是否是部分的.

这让我的想法PartialView()只是来自MVC2的宿醉并且与MVC3 +无关(无论如何使用Razor)?或者我错过了一些关键特征PartialView()

Mar*_*ulz 7

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


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

如果要返回部分视图,例如在名为using的子操作中@Html.Action(action, controller),请使用PartialView.如果要返回包含布局的"完整"视图,请使用View().


Dav*_*ich 5

MSDN参考:

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

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

public string MasterName { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

不幸的是,抽象方法ExecuteResult()的实现没有发布,但我毫不怀疑它使用该MasterName字段来查找和渲染主层.


我们的共同经历:

就像你一样,我已经使用View()返回了部分视图=.我不推荐它.但明显的差异并不大.

为MasterName设置一个额外的对象似乎有点浪费,但更重要的区别可能是实现ExecuteResult().

当您选择View()方法并创建一个ViewResultObject而不是使用PartialView()来创建PartialViewResult对象时,您的效率会降低; 您的应用程序正在执行检查您的MasterName字段是否已分配的额外工作.