我创建了一个部分视图,我希望能够在我网站的不同页面上重复使用。
目前,对于每个网页,我创建了一个ViewModel,用于整理我想要显示的所有信息,然后将其发送到视图,该视图会损害3个独立的部分视图。这是一个简化的例子:
public ActionResult Index()
{
MyViewModel m = new MyViewModel();
MyViewModel modelData = m.GetModelData();
return View(modelData);
}
public MyViewModel GetModelData()
{
ModelData modelData = new ModelData();
modelData.employees = GetEmployees();
modelData.products = GetProducts();
modelData.prices = GetPrices();
return modelData
}
在我的网页中,每个局部视图都从相同的视图模型继承,这允许我强烈键入每个局部视图:
Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.MyViewModel>
我的问题是我想在其他网页中使用我的部分视图('Price.ascx'),因为它非常通用。但是,因为它继承自DomainModel.Entities.MyViewModel
,如果我尝试传递另一个视图模型,我会收到错误,例如CheckOutViewModel。
我不确定如何解决这个问题?如何在asp.net mvc 2中使用局部视图,以便可以在任何网页上重复使用并接受任何视图模型?
在某个地方,我觉得我错过了一些明显的东西......
答案 0 :(得分:2)
创建特定于价格部分的视图模型。在调用页面使用的页面级视图模型中包含该视图模型。然后在调用RenderPartial时,将模型的相应部分传递给partial。
public MyViewModel GetModelData()
{
ModelData modelData = new ModelData();
modelData.employees = GetEmployees();
modelData.products = GetProducts();
modelData.MyPricesViewModel = GetPrices(); <-- this should be a view model
return modelData
}
将您的局部视图编辑为仅从特定于其需要的模型继承。
Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.MyPricesViewModel>
在您的视图页面中,您将调用:
<% Html.RenderPartial("Prices", Model.MyPricesViewModel); %>