asp.net-mvc-2 - 如何使部分 View 可在不同 View 模型(asp.net mvc 2)之间重复使用?

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

我创建了一个部分 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/

相关文章:

c# - 如何在迭代器中使用 Html.DisplayFor?

asp.net-mvc - 如何在 ASP.NET MVC 中创建可重用的自定义 HTML 面板?

javascript - 处理部分 View 和 javascript

c# - 如何测试在 C# ASP .NET MVC 中呈现的部分 View

ruby-on-rails - 处理 undefined variable

css - DXImageTransform.Microsoft.AlphaImageLoader 相对?

asp.net-mvc - 从表达式构建 URL

.net - 在哪里存储第 3 方库?

c# - asp.net mvc 2 多个局部 View

javascript - 在 MVC3 中有条件地填充局部 View 控件