首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让局部视图在不同的视图模型(asp.net MVC2)中重用?

如何让局部视图在不同的视图模型(asp.net MVC2)中重用?
EN

Stack Overflow用户
提问于 2010-10-06 17:15:18
回答 1查看 1.3K关注 0票数 3

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

目前,对于每个网页,我创建了一个ViewModel,它整理了我想要显示的所有信息,然后我将其发送到3个单独的部分视图的折衷视图。下面是一个简化的示例:

代码语言:javascript
复制
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
    }

在我的网页中,每个局部视图都继承自相同的视图模型,这允许我强类型每个局部视图:

代码语言:javascript
复制
Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.MyViewModel>

我的问题是,我想在其他网页中使用我的一个局部视图('Prices.ascx'),因为它非常通用。但是,因为它继承自DomainModel.Entities.MyViewModel,所以如果我试图传递另一个视图模型,例如CheckOutViewModel,我会得到一个错误。

我不知道如何才能解决这个问题?如何在asp.net MVC2中使用局部视图,以便可以在任何网页上重用它并接受任何视图模型?

一路走来,我觉得我遗漏了一些明显的东西...

EN

回答 1

Stack Overflow用户

发布于 2010-10-06 19:31:42

创建特定于部分价格的视图模型。包括在调用页使用页面级视图模型中。然后,在调用RenderPartial时,将模型的适当部分传递给部分。

代码语言:javascript
复制
public MyViewModel GetModelData()
    {
        ModelData modelData = new ModelData();
        modelData.employees = GetEmployees();
        modelData.products = GetProducts();
        modelData.MyPricesViewModel = GetPrices();   <-- this should be a view model
        return modelData
    }

编辑您的局部视图,使其仅从特定于其需要的模型继承。

代码语言:javascript
复制
Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.MyPricesViewModel>

然后,在视图页面中调用:

代码语言:javascript
复制
<% Html.RenderPartial("Prices", Model.MyPricesViewModel); %>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3871037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档