如何在不同的视图模型(asp.net mvc 2)中重用部分视图?

时间:2010-10-06 09:15:18

标签: asp.net-mvc-2 partial-views

我创建了一个部分视图,我希望能够在我网站的不同页面上重复使用。

目前,对于每个网页,我创建了一个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中使用局部视图,以便可以在任何网页上重复使用并接受任何视图模型?

在某个地方,我觉得我错过了一些明显的东西......

1 个答案:

答案 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); %>