2010-11-17 31 views
27

View()方法可以加載部分視圖。查看()與PartialView()

View()PartialView()之間的不同之處在於View()可以加載視圖和局部視圖和PartialView()只能加載局部視圖?

+24

這是一個拗口令? – Lorenzo 2010-11-17 23:14:59

回答

35

由視圖引擎決定是否要處理與常規視圖不同的部分視圖。

例如,在WebFormViewEngine中沒有區別。

在新的ASP.NET MVC 3 RazorViewEngine中存在一些差異。只有常規視圖纔會運行「_viewstart.cshtml」頁面,因爲它們適用於設置佈局頁面等內容。

+0

Viewstart支持和佈局支持(單獨)加上小的異常差異:http://completedevelopment.blogspot.com/2014/01/is-there-really-no-difference-between.html – 2014-01-12 07:33:54

+0

另外我覺得'PartialView() '會查找ViewEngine的PartialViewLocationFormats屬性中指定的視圖位置,而View()將使用'ViewLocationFormats'屬性。 – 2014-02-27 23:45:44

+0

@MaksimVi。這是正確的,除了在MVC的默認視圖引擎中,位置在部分視圖和「常規」視圖之間都是相同的。但是,如果您對它們進行了不同配置或使用了不同的視圖引擎,那麼它們肯定會有所不同。 – Eilon 2014-03-03 23:45:08

3

如果您有Index.aspxIndex.ascx對於具有這兩種方法的同一控制器可能有助於消除歧義。但我同意一般View是比較常用的。而且PartialView也可以用來加載完整的視圖,只是它的語義錯誤。

+1

我很確定WebFormViewEngine對於普通視圖和部分視圖都使用完全相同的文件擴展名,所以這可能不會幫助您消除歧義。 – Eilon 2010-11-17 23:34:55

+0

Eilon不正確。部分視圖是.ascx,視圖是.aspx – Chev 2010-11-18 00:06:03

+1

@Chevex如果您查看WebFormViewEngine的「ViewLocationFormats」和「PartialViewLocationFormats」集合,您將看到它們是相同的。雖然召喚對全視圖使用.aspx,部分視圖使用.ascx,但視​​圖引擎將它們視爲相同。 – marcind 2010-11-18 00:31:29

16

我覺得最大的區別是關於使用_Layout頁面:)

  • PartialView(:剃刀引擎將獲取視圖(如index.cshtml)沒有任何頁面佈局(_layout。 CSHTML)。
  • 查看():發動機將讓您的視圖(如index.cshtml),然後追加該視圖的佈局頁面中的內容(_layout.cshtml)
+1

+1,因爲這是IMO真正最重要的事實!嘗試使用例如'@ H​​tml.Action(「SideMenu」,「Menu」)''這樣:'public ActionResult SideMenu(){return View(); }'。你會想知道爲什麼它用'RenderBody()'渲染到'_Layout'中。返回'PartialView()',因爲它不是通過'RenderBody()'呈現給'_Layout'。 – dee 2016-12-20 06:35:28