RenderPartial и динамический выбор частичных представлений - PullRequest
1 голос
/ 04 июня 2009

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

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

Мое "родительское" представление перебирает дочерние модели следующим образом:

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

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

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

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

1 Ответ

1 голос
/ 04 июня 2009

знаковых,

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

Я пойду, хотя:

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

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

Итак ... в ответ:

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

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

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

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

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

При изучении инфраструктуры MVC я обнаружил, что код Oxite полезен.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...