我將Umbraco作爲CMS與Razor一起使用。這種方法的侷限性是我的頁面模板綁定到一個Umbraco特定的對象,它沒有我需要的所有屬性。到目前爲止,爲了解決這個問題,我多次調用@Html.Action()
以顯示由我的控制器構建的部分視圖。每頁使用多個@ Html.Action()是否昂貴?
這是一個昂貴的方式來實現我想要什麼,以及是否有周圍被綁定到你不控制視圖模型的限制讓其他的方法?
我將Umbraco作爲CMS與Razor一起使用。這種方法的侷限性是我的頁面模板綁定到一個Umbraco特定的對象,它沒有我需要的所有屬性。到目前爲止,爲了解決這個問題,我多次調用@Html.Action()
以顯示由我的控制器構建的部分視圖。每頁使用多個@ Html.Action()是否昂貴?
這是一個昂貴的方式來實現我想要什麼,以及是否有周圍被綁定到你不控制視圖模型的限制讓其他的方法?
當然,這個問題的答案是「這取決於」。
每個@Html.Action()
使得對一個Controller
的動作的獨立請求。很明顯,對@Html.Action()
的任何呼叫都會產生比無更多的開銷。
除此之外,在Umbraco假設您正在調用SurfaceController
類的動作時,還有一個附加層,Umbraco引入了實例化具有上下文的控制器並連接動作。
然而,所有使用@Html.Action()
是說讓你分割你的視圖模型和服務於功能獨立於你的頁面模式。這是回報,我認爲這是足夠的優勢。這裏重要的是確保你使用這種技術足以使代碼基本可管理,同時仍然使請求有效。例如,請勿使用可通過頁面模型直接訪問的顯示內容。爲此,您可以使用部分。
你應該一直檢討你的ChildAction代碼,以確保高速緩存可以用來儘可能地適當降低每次通話處理量。例如,我總是使用ChildAction來生成我的主導航,但由於導航不會改變,我緩存返回的模型,因此對操作的調用盡可能快。
最後,如果你控制器有喜歡EF數據庫環境等使用IoC容器像Autofac的依賴關係,以確保依賴性每個實例纏繞了一次,然後共享。這可以確保控制器(以及操作)使用的任何資源都是重複的。
您在使用@ Html.Action()時是否正在經歷任何放緩?如果沒有,那麼你不應該把它想得太多IMO。 – idipous
不在我的開發環境;) – AlexFoxGill
所以這是棘手的,因爲你永遠不知道。另外是使用的ViewModel類密封?如果沒有,你可以繼承它並在你控制它時使用它。您也可以查看此[鏈接](http://pratapreddypilaka.blogspot.gr/2011/11/htmlpartial-vs-htmlaction-mvc-razor.html) – idipous