Как я могу сделать частичное представление повторно используемым в разных моделях представления (asp.net mvc 2)? - PullRequest
3 голосов
/ 06 октября 2010

Я создал частичное представление, которое я хотел бы использовать повторно на разных страницах моего сайта.

В настоящее время для каждой веб-страницы я создаю модель представления, в которой собрана вся информация, которую я хотел бы показать, а затем отправляю ее в представление, которое содержит 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>

Моя проблема заключается в том, что я хотел бы использовать одно из моих частичных представлений ('Prices.ascx') на других веб-страницах, поскольку оно довольно общее. Однако, поскольку он наследуется от DomainModel.Entities.MyViewModel, я получаю ошибку, если пытаюсь передать другую модель представления, например, CheckOutViewModel.

Я не уверен, как мне обойти эту проблему? Как использовать частичное представление в asp.net mvc 2, чтобы его можно было повторно использовать на любой веб-странице и принять любую модель представления?

Где-то по пути я чувствую, что упустил нечто очевидное ...

1 Ответ

2 голосов
/ 06 октября 2010

Создайте модель представления, специфичную для частичного Цены. Включите эту модель представления в модель представления уровня страницы, используемую вызывающими страницами. Затем при вызове 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
    }

Отредактируйте частичное представление, чтобы наследовать только от модели, соответствующей его потребностям.

Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.MyPricesViewModel>

На странице просмотра вы должны позвонить:

<% Html.RenderPartial("Prices", Model.MyPricesViewModel); %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...