我們試圖動態獲取模板標題中的類別列表。 例如「短褲,牛仔褲,長褲等」應該出現在類別列表下拉菜單中。沒有控制器的_layoutPage.cshtml中的動態內容
正如我們所知,佈局頁面對所有controllers.so來說都是全局的,這是在不使用任何控制器的情況下完成此操作的最佳方法,因爲我們知道佈局頁面不被任何控制器調用,並且只是定義 在查看頁面。
我們試圖動態獲取模板標題中的類別列表。 例如「短褲,牛仔褲,長褲等」應該出現在類別列表下拉菜單中。沒有控制器的_layoutPage.cshtml中的動態內容
正如我們所知,佈局頁面對所有controllers.so來說都是全局的,這是在不使用任何控制器的情況下完成此操作的最佳方法,因爲我們知道佈局頁面不被任何控制器調用,並且只是定義 在查看頁面。
您可以通過向控制器動作發出Ajax請求並從那裏返回json並在佈局頁面上顯示,或者可以製作局部視圖並在佈局頁面內呈現局部視圖,從而動態獲取佈局頁面上的列表HTML輔助像@Html.RenderAction()
或@Html.RenderPartial()
雖然_Layout.cshtml
(以及任何其他佈局/母版頁,對於這個問題)由MVC框架自動加載,這並不意味着它不能使用ViewBag
。我會建議創建一個BaseController
,所有的控制器都會擴展。您可以將類別列表添加到BaseController
中的ViewBag
,這會使其在版面頁面中可用。
public class BaseController : Controller
{
public BaseController()
{
ViewBag.Categories = GetAllCategories();
}
}
我知道您曾表示不希望有一個「控制器解決方案」,但我相信,你不知道,這實際上是可能的。事實上,擁有一個基礎控制器可以爲您的項目帶來很多功能。需要由你的控制器被再利用的一切可設置BaseController
內:
的ViewBag
方法在框架已被使用的數據,方法,控制器過濾器等。我不記得MVC5模板是怎麼樣的,但是如果你看MVC4模板,你會發現_Layout.cshtml
頁面使用ViewBag
來設置當前頁面的標題:<title>@ViewBag.Title - My ASP.NET MVC Application</title>
。
只是一個查詢,我們必須使用viewmodel類。我聽說數據可以直接從模型傳遞到視圖。 – user3818870 2014-09-19 06:37:31
@ user3818870我不知道_「數據可以直接從模型傳遞到視圖」_,但是如果要創建視圖模型則由您決定。創建視圖模型的優點是,您可以通過'ViewBag'轉換您傳遞的數據並擁有強類型對象。例如,如果您只有一串字符串,則不需要自定義模型;您可以在佈局頁面中執行此操作:'List
我寧願去@ Html.RenderAction()。 原因: 1.最佳性能 2.您可以緩存此操作的數據。 3.易於維護。
此列表是否爲靜態?它存儲在數據庫中嗎?它是否有大量元素? – 2014-09-19 06:11:36
它是動態的,列表將在數據庫中不斷增加。 – user3818870 2014-09-19 06:35:57