我的视图不是强类型的.但是我在这个视图中有一个强类型的局部视图.
如何将模型传递给此强类型视图?
我试过类似的东西
public ActionResult Test()
{
MyData = new Data();
MyData.One = 1;
return View("Test",MyData)
}
Run Code Online (Sandbox Code Playgroud)
在我的TestView中
<% Html.RenderPartial("PartialView",Model); %>
Run Code Online (Sandbox Code Playgroud)
这给了我一个stackoverflow异常.所以我不知道如何传递它.当然,如果可能的话,我不想让测试视图强烈输入,如果我在该视图中有10个强类型的局部视图,我需要像某种包装器.
我使用ASP.NET MVC越多,我就越喜欢它.但是,在母版页上显示模型数据的情况下,似乎有几种方法可以实现.我不确定最好的解决方案.
我的例子是一个商业网站,我想在每个页面上输出产品类别列表,并显示访客购物车的状态.
在asp.net Web表单中,我通常会使用用户控件执行此操作,每个用户控件都执行自己的数据绑定以检索所需的数据.
在MVC中,所有数据都应由控制器传递.
因此,对于类别,最简单的解决方案似乎是在控制器操作中的View数据中传递它:
ViewData["Categories"] = _service.GetCategories();
Run Code Online (Sandbox Code Playgroud)
但是,为每个操作执行此操作并不是很干,所以在本文之后我创建了一个基本控制器,它将所需的数据添加到我的ViewData:
public class AppController : Controller
{
IAppService _service;
public AppController() { }
public AppController(IAppService appService)
{
_service = appService;
SetSiteData();
}
private void SetSiteData()
{
ViewData["Categories"] = _service.GetCategories();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我为ViewMasterPage创建了一个扩展:
public static void RenderCategoryList(this ViewMasterPage pg) {
pg.Html.RenderPartial("CategoryList", pg.ViewData["Categories"]);
}
Run Code Online (Sandbox Code Playgroud)
在我的MasterPage中:
<div>
<%this.RenderCategoryList(); %>
</div>
Run Code Online (Sandbox Code Playgroud)
这似乎是一个非常干净的方法.但是,这是最好的方法,因为我也看到了为MasterPage创建ViewModel的建议.我可以看到,随着ViewModel数据的增长,这可能是一个更好的解决方案.
关于购物车状态,我想我会做类似的事情但不确定RenderAction是否更合适(何时使用RenderAction与RenderPartial与ASP.NET MVC).谢谢,本