ASP.NET MVC 2 - когда использовать шаблоны против когда использовать частичные представления - PullRequest
8 голосов
/ 20 августа 2009

Одной из новых функций в ASP.NET MVC 2 Preview 1 является поддержка концепции шаблонов редактора и шаблонов отображения, которые позволяют заранее определить, каким образом данный объект будет отображаться для отображения или редактирования с помощью простого помощника HTML. по телефону:

<%=Html.EditorFor(customer => customer) %>
<%=Html.DisplayFor(customer => customer) %>

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

Зачем использовать шаблон поверх частичного просмотра или наоборот? Кроме того, при использовании шаблона редактора, каков идеальный способ добавить клиентскую логику в редактор, не копируя ее в каждое представление, использующее этот редактор?

Ответы [ 2 ]

3 голосов
/ 20 августа 2009

ScottGu объясняет кое-что из этого в своем блоге о MVC V2 .

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

public class Customer
{
    public string Name { get; set; }
    [UIHint("MyCoolCalendar")]
    public DateTime CoolDate { get; set; }
}

А затем создайте редактор:

<%= Html.EditorFor(customer => customer) %>

Будет создан текстовый ввод для имени клиента и MyCoolCalendar (который является настраиваемым элементом управления) для CoolDate без необходимости написания настраиваемого элемента управления для переноса всего объекта. Он автоматически определяет тип элемента управления из типа / uihint свойства. По крайней мере, это так, как я понял, но у меня еще не было времени проверить это.

0 голосов
/ 08 февраля 2010

Вот один пример, который я нашел, чтобы работать хорошо.

Допустим, у вас есть клиент с адресом. Вы не можете создать Адрес для НОВОГО Клиента, но через Ассоциацию у вас может быть объект Customer, имеющий поле Address.

Затем в вашем методе «Создать» для Customer вы вызываете Html.EditorFor(c => c.Address); (и здесь вы можете создать собственный шаблон для ваших нужд), который создаст полностью заполненный объект Address, который вы можете сохранить перед Customer, решая, таким образом, зависимость.

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

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

-vlad

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