2009-06-04 10 views
1

Приложение MVC содержит родительскую модель, которая будет содержать 1 или более дочерних моделей.RenderPartial и динамический выбор частичных представлений

Я установил основной вид для отображения свойств родительской модели, а затем прокрутил коллекцию моих дочерних моделей (разных типов, но все наследует от того же базового типа). Каждая из дочерних моделей имеет соответствующий частичный вид.

Мои «родитель» просмотр перебирает детей-моделей, как это:

foreach (ChildBase child in ViewData.Model.Children) 
{ 
    Html.RenderPartial("Partials/"+child.ChildType.ToString()+"Child", 
    section); 
} 

Мое приложение имеет соответствующую /Partials/ChildType1.ascx, ChildType2.ascx и т.д. Все отлично работает.

  1. Это подходящий способ использования частичных представлений? Это связано с динамическими именами, но я не знаю другого способа выполнить динамический выбор правильного представления, не прибегая к большому запросу switch.

  2. Возможно ли использовать один и тот же вид для нескольких «режимов» одной и той же модели? Я хотел бы использовать тот же .ascx для отображения представления «только для чтения» модели, а также формы редактирования, основанной на том, какое действие Controller Action используется для возврата представления.

ответ

1

Iconic,

Трудно ответить на вопросы, не зная точно, что вы пытаетесь достичь.

Я буду идти, хотя:

Если вы знакомы с веб-формами, думать о своем частичный вид как WebForms UserControl на данный момент и думать о части вашей модели, которая имеет отношение к вашему частичные представления как «фрагмент информации», которые хотят перейти к частичному представлению.

Естественный выбор для использования частичного представления будет для элементов, используемых во многих представлениях на вашем сайте.

Так что ... в ответ:

1.Although что вы делаете действительно, это, кажется, не совсем правильно. Пример частичного зрения я использовал бы строку в сетке данных, где бы вызвать частичный вид, проходящий в объекте строки в качестве своей модели:

foreach (MyObject o in Model.objects) 
{ 
    Html.RenderPartial("Shared/gridRowForObject.ascx", o, ViewData); 
} 

Вы можете сильно ввести свои взгляды также ожидайте, что определенный тип будет передан как объект Model.

Опять другое использование может быть окно Логин или «связаться со мной сформировать» и т.д.

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

При изучении структуры MVC я нашел код Oxite полезным.

Я надеюсь, что это поможет.

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