我创建了一个部分 View ,希望能够在网站的不同页面上重复使用。
目前,我为每个网页创建一个 ViewModel,它整理我想要显示的所有信息,然后将其发送到包含 3 个独立部分 View 的 View 。这是一个简化的示例:
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
}
在我的网页中,每个部分 View 都继承自相同的 View 模型,这允许我强类型每个部分 View :
Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.MyViewModel>
我的问题是,我想在其他网页中使用我的部分 View 之一(“Prices.ascx”),因为它非常通用。但是,因为它继承自 DomainModel.Entities.MyViewModel
如果我尝试传递另一个 View 模型,例如,我会收到错误。检查ViewModel。
我不知道如何解决这个问题?如何在 asp.net mvc 2 中使用部分 View ,以便可以在任何网页上重复使用它并接受任何 View 模型?
一路走来,我觉得我错过了一些明显的东西......
最佳答案
创建特定于“价格”部分的 View 模型。将该 View 模型包含在调用页面使用的页面级 View 模型中。然后在调用 RenderPartial 时,将模型的适当部分传递给该部分。
public MyViewModel GetModelData()
{
ModelData modelData = new ModelData();
modelData.employees = GetEmployees();
modelData.products = GetProducts();
modelData.MyPricesViewModel = GetPrices(); <-- this should be a view model
return modelData
}
编辑您的部分 View ,使其仅继承特定于其需求的模型。
Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.MyPricesViewModel>
在您的 View 页面中,您可以调用:
<% Html.RenderPartial("Prices", Model.MyPricesViewModel); %>
关于asp.net-mvc-2 - 如何使部分 View 可在不同 View 模型(asp.net mvc 2)之间重复使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3871037/