在MVC3中渲染導航的最佳方式是什麼?在我的應用程序中,控制器必須決定導航中的內容,但據我所知,無法將模型傳遞給_Layout文件(導航html所在的位置)以提供此信息。在MVC3中渲染導航
3
A
回答
6
您可以使模型適用於您的佈局。
- 定義一個基類MyBaseModel,其中包含要用於佈局的屬性。
- 有你的模型子類MyBaseModel,並確保您填寫的屬性
- 讓你的佈局指定@model MyBaseModel
- 使用性能
參見this blog post哪裏有類似的問題(「我們經常發現我們自己需要在每個頁面中包含相同的信息「)。
4
最好是一個相對和主觀的術語。我通常會用類似druttka的答案的方法去,但另一種選擇是使用RenderAction()
調用控制器動作
<div>@Html.RenderAction("action", "controller")</div>
3
我將提供一些counterpoints到@ druttka的答案。但大多數情況下,你必須決定你想做什麼交易。
如果您使用您的視圖模型,你現在迫使兩兩件事:
- 每個視圖必須是強類型
- 每一個動作都要調用該函數來填充包括導航各級在您的視圖模型
第一點是沒有那麼糟糕,因爲在一個典型的非靜態網站這不會從模型中派生反正非常幾頁,它很容易創建一個空模型fo那些頁面。然而,第二點更令人討厭。每個函數都必須實例化它自己的模型,然後填充模型提供的每個導航級別的導航屬性。這可能非常麻煩,但可以在OnActionExecuted
中對至少nav進行相當優雅的處理,這不是特定於給定操作的。
另一種方法是將nav添加到ViewBag
。這可以在任何時候完成,並且不會強制您爲每個視圖指定模型,這對於您不需要指定模型的情況下的靈活性非常有用。但應該注意的是,asp.net mvc 3中的ViewBag
是動態類型的,您不能將其用作lambda函數中的參數,從而阻止您在佈局中執行類似@Html.DisplayFor(viewBag => viewBag.MainNav)
的操作,這是一個真正的拖延。您仍然可以渲染部分並指定適當的DisplayTemplate。
相關問題
- 1. Silverlight不渲染導航
- 2. MVC3中的部分渲染
- 3. 導航欄引導渲染問題
- 4. 在asp.net中渲染部分頁面MVC3
- 5. 導航實驗無法渲染覆蓋
- 6. 導航菜單 - 渲染將管道符
- 7. 從xml渲染mvc3中的頁面
- 8. 在堆棧導航器標籤上單擊時渲染屏幕
- 9. 渲染右側的div並保持導航居中
- 10. 你如何覆蓋Orchard CMS中導航區域的渲染?
- 11. MVC DataAnnotation渲染錯誤HTMLin MVC3
- 12. MVC3與MVCcontrib不渲染/生產HTML
- 13. MVC3 Html.BeginForm沒有爲頁面渲染
- 14. 渲染模板的HtmlHelper與MVC3 /剃刀
- 15. 在渲染頁面中渲染頁面
- 16. 在lwjgl渲染中移動渲染器
- 17. 如何在導軌金屬中渲染?
- 18. 在渲染器中導入Typescript模塊
- 19. Razor MVC3路由/導航
- 20. asp.net mvc3和多級導航
- 21. MVC3防止導航從
- 22. MVC3和麪包屑導航
- 23. 頁面導航與MVC3
- 24. MVC3在部分視圖中渲染腳本
- 25. 在MVC3的循環中渲染部分視圖
- 26. 在ASP.Net中渲染局部視圖使用Ajax的MVC3 Razor
- 27. 渲染在page.tpl.php中
- 28. 的ReferenceError:導航不angular4與服務器端渲染
- 29. Magento的管理面板導航渲染鉤入了ACL?
- 30. 導航器沒有渲染任何東西
公平地說,對於我的個人網站,我使用基礎模型進行佈局,每個視圖都有一個來自它的模型。這並不完美,但是每次你認爲MVC都有問題時,只要做一點工作就可以實現擴展。 – 2011-03-02 15:54:31
+1是一個很好的選擇。我在大多數情況下更喜歡這種方式,但最近被要求避免使用ViewBag並保留強類型的視圖,所以這是我的頭腦所在。 – 2011-03-02 15:54:34