我越使用ASP.NET MVC,我越喜歡它。但是,在母版頁上顯示模型數據的情況下,似乎有幾種方法可以實現。我不確定最好的解決方案。ASP.NET MVC主頁數據
我的例子是一個商業網站,我希望在每個網頁上輸出產品類別列表,並顯示訪客購物車的狀態。
在asp.net web窗體中,我通常會使用用戶控件執行此操作,每個用戶控件都執行自己的數據綁定以檢索所需的數據。
在MVC中,所有數據都應該由控制器傳遞。
所以關於類最簡單的辦法似乎是通過這個在控制器動作視圖數據:
ViewData["Categories"] = _service.GetCategories();
但是,這樣做的每一個動作不是很乾所以以下this article我創建,增加了所需要的數據到我的ViewData鹼控制器:
public class AppController : Controller
{
IAppService _service;
public AppController() { }
public AppController(IAppService appService)
{
_service = appService;
SetSiteData();
}
private void SetSiteData()
{
ViewData["Categories"] = _service.GetCategories();
}
}
我然後創建了ViewMasterPage擴展:
public static void RenderCategoryList(this ViewMasterPage pg) {
pg.Html.RenderPartial("CategoryList", pg.ViewData["Categories"]);
}
在我的母版:
<div>
<%this.RenderCategoryList(); %>
</div>
這似乎是一個相當乾淨的方法。但是,這是最好的方式,因爲我也看到了爲您的MasterPage創建ViewModel的建議。我可以看到,也許隨着ViewModel數據的增長,這可能是一個更好的解決方案。
關於購物車狀態,我想我會做類似的事情,但我不確定RenderAction是否更合適(When to use RenderAction vs RenderPartial with ASP.NET MVC)。 謝謝, 本
對於RenderAction來說,它幾乎是一個完美的解決方案,在MVC2發佈之後,您可以緩存RenderAction結果,這將是完美的。 – mxmissile 2010-01-22 15:37:01
我是否需要做任何事情來使用上面使用的強類型RenderAction調用?我正在使用mvc 2.0預覽,並且似乎無法以這種方式構建RenderAction方法。 – 2010-01-23 09:35:43