我越用ASP.NET MVC,就越喜欢它。然而,在显示主页面上的模型数据方面,有几种方法。我不确定最佳解决方案是什么。
我的示例将是一个商务网站,在每个页面上输出产品类别列表,并显示访问者购物车的状态。
在asp.net web forms中,我通常会使用用户控件,每个控件都执行自己的数据绑定以检索所需数据。
在MVC中,所有数据都应通过控制器传递。
因此,关于类别,最简单的解决方案似乎是在控制器操作中通过视图数据传递它:
我随后为ViewMasterPage创建了一个扩展:
这种方法看起来很简洁。然而,我也看到有人建议为您的MasterPage创建一个ViewModel。也许随着ViewModel数据的增长,这可能是更好的解决方案。
关于购物车状态,我想我会做类似的事情,但不确定RenderAction是否更合适(在ASP.NET MVC中何时使用RenderAction vs RenderPartial)。
谢谢, Ben
我的示例将是一个商务网站,在每个页面上输出产品类别列表,并显示访问者购物车的状态。
在asp.net web forms中,我通常会使用用户控件,每个控件都执行自己的数据绑定以检索所需数据。
在MVC中,所有数据都应通过控制器传递。
因此,关于类别,最简单的解决方案似乎是在控制器操作中通过视图数据传递它:
ViewData["Categories"] = _service.GetCategories();
然而,对于每个操作都这样做并不是很DRY,因此遵循本文,我创建了一个基础控制器,将所需数据添加到我的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"]);
}
而在我的MasterPage中:
<div>
<%this.RenderCategoryList(); %>
</div>
这种方法看起来很简洁。然而,我也看到有人建议为您的MasterPage创建一个ViewModel。也许随着ViewModel数据的增长,这可能是更好的解决方案。
关于购物车状态,我想我会做类似的事情,但不确定RenderAction是否更合适(在ASP.NET MVC中何时使用RenderAction vs RenderPartial)。
谢谢, Ben