Dot-Net

跨所有子視圖的 ASP.NET MVC 3 佈局 ViewBag 數據

  • December 7, 2011

無論子視圖是什麼,我們都需要將動態數據傳遞給我們的佈局文件。例如,我們在佈局的標題中顯示一些使用者特定的數據。

我們如何將這些數據傳遞給佈局視圖,而不需要每個動作都獨立提供呢?我們應該使用自定義控制器,還是有更好的解決方案?

我使用的策略是擁有一個基礎視圖模型,我的所有視圖模型都從該基礎視圖模型中派生。我使用基本控制器,但您也可以使用全域過濾器並覆蓋 OnActionExecuted。當我檢測到返回 ViewResult 的操作時,我將模型轉換為我的基本視圖模型,並從基本控制器設置模型的公共屬性。

全域過濾器和基本控制器之間的選擇取決於多種因素。如果它真的適用於所有操作(返回視圖結果)並且您不需要注入來訪問某些資源,那麼我可能會使用過濾器。如果您需要注入依賴項,或者您有一些控制器將應用數據而其他控制器不會應用數據(例如 Admin 控制器),那麼我將採用基本控制器路由。如果您使用它,您將需要記住從控制器派生。

如果您不想從通用視圖模型派生,也可以對 ViewBag 執行相同的操作。我喜歡強類型模型,但是 YMMV。

引用自:https://stackoverflow.com/questions/5207289