2013-09-27 106 views
4

所以有人問我這個問題的任何差異:在「返回查看()」和「返回PatialView()」仍處於MVC 3

我什麼時候會回來查看(),當我將返回PartialView( )?

我immdiate反應,如果它是一個(ε2)使用PartialView()。然後我意識到,我經常返回View()作爲部分視圖,沒有明顯的破壞效果?!那麼撥打return PartialView()有什麼意義?

我覺得這個問題What's the difference between 「return View()」 and 「return PartialView()」。這似乎是MVC2特有的。即討論關於.aspx.ascx控制擴展。使用剃刀我們所有的觀點是.cshtml無論他們是否偏袒。

我的想法是PartialView()只是從MVC2的宿醉,並沒有真正相關的MVC3 +(當使用剃刀無論如何)?或者我錯過了PartialView()的一些關鍵功能?

+0

http://stackoverflow.com/questions/18872512/what-is-the-point-of-partial-views-in-asp-net-mvc/18873011#18873011 – archil

回答

5

MSDN參考:

如果使用MSDN定義對比MSDN定義ViewResult() ObjectPartialViewResult() Object

你找到的唯一區別是的ViewResult有額外的屬性:

public string MasterName { get; set; } 

否則,這兩個對象都繼承自ViewResultBase,似乎從基類繼承所有其他屬性和方法。

不幸的是,抽象方法ExecuteResult()的實現未發佈,但我毫不懷疑它使用MasterName字段來查找和渲染主層。


我們共同的經驗:

和你一樣,我已經回到局部視圖=使用View()。我不推薦它。但明顯的差異並不大。

爲MasterName設置一個額外的對象看起來很浪費,但更重要的區別可能是ExecuteResult()的實現。

當您選擇View()方法並創建ViewResult對象而不是使用PartialView()來創建PartialViewResult對象時,效率會降低;您的應用程序正在執行額外的工作來檢查您的MasterName字段是否已分配。

7

tl; dr:PartialView()不使用佈局來返回視圖。


您可以設置將然後通過各種視圖中使用內_ViewStart.cshtml默認佈局文件(位於Views文件夾)。通過這樣做,您可以避免在每個視圖中設置Layout屬性。 PartialView()將不包含該佈局文件或任何其他。

如果您想要返回部分視圖,例如在使用@Html.Action(action, controller)調用的兒童動作中,使用PartialView。如果您想返回包括佈局的「完整」視圖,請使用View()

+0

沒有真正回答我的問題。我的佈局通常在視圖中聲明。我沒有理由明白爲什麼我**不能**返回'@ Html.Action'的'View'?如果我這樣做沒有打破? – Liam

+1

@Liam你沒有在你的問題中提及'@ Html.Action',所以我在處理佈局文件時指出了兩種方法的區別。 –

+1

*或者我錯過了PartialView()的一些關鍵特性?*,是的。視圖應該不**知道他們正在使用什麼樣的佈局,否則他們不是[可重用](http://en.wikipedia.org/wiki/Code_reuse)。 –