我越使用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