2010-05-07 5 views
2

У меня есть contoller, который отображает 3 разных вида. Но у меня также есть общая часть (div) для каждой точки зрения. Я подумал, что могу создать UserControl с собственным контроллером и включить этот элемент управления в свои представления (новый контроллер и представление в качестве controll).asp.net mvc 2 множественный частичный вид

Как использовать этот UserControl? Должно ли быть частичное представление? Или другой подход - могу ли я иметь несколько частичных представлений на одной странице?

Я искал в Интернете последние дни просмотра и не нашел рабочего решения, которое мне подходит. Также я хочу использовать сильно типизированные представления/данные.

Cheers

ответ

2

Необходимо использовать частичный вид. Затем вы вызываете <% Html.PartialRender("MyCommonControl", Model); %> в 3-4 вида, чтобы отобразить общий раздел (например, меню или что-то еще).

Таким образом, вы можете строго набрать частичный вид и передать модель (как в приведенном выше примере) или часть модели к ней, которая имеет значение.

UserControls - это парадигма ASP.NET Forms, вы должны использовать частичные представления, потому что они используют один и тот же MVC View Engine.

Update

Если вы поместите PartialView в /Views/Home он будет доступен только в HomeController Вы хотите поместить его в /Views/Common, чтобы сделать его доступным для всех контроллеров.

Вы должны также сделать Generic ViewModel для данных, которые управляют потребности, и сделать его субкомпонент моделей для каждого контроллера:

Например:

class CommonSectionViewModel 
{ 
    public string Data { get; set; } // Just Example Data 
    public int Count { get; set; } 
} 

class ProductsModel 
{ 
    public CommonSectionViewModel CommonData { get; set; } 
    // Other properties for a products models 
} 

class CompaniesModel 
{ 
    public CommonSectionViewModel CommonData { get; set; } 
    // Other properties for a company model 
} 

Тогда в Фототуров для контроллеры вы называете парциальное делают так:

<% Html.PartialView("MyCommonControl", Model.CommonData); %> 

Примечание: вы можете изменить управление, а также

Имея следующие файлы:

  1. /Views/Common/MyCommonControl.ascx
  2. /Views/Products/MyCommonControl.ascx

При вызове .RenderPartial("MyCommonControl") из ProductsController # 2 используется, и от любого другого контроллера, # 1 используется. Поэтому вы можете переопределить функциональность для некоторых контроллеров, если хотите.

+0

Thanks Aren, Этот общий раздел будет содержать данные из запроса БД. Если у меня есть отдельный контроллер для этого представления, должен ли я помещать этот элемент управления в другую папку, а не хранить его в папке, где хранятся другие представления? – 303

+0

Я обновил свои примеры, чтобы показать вам больше :) – Aren

+0

Спасибо Арен! – 303

Смежные вопросы