Связывание, префиксы и сгенерированный HTML - PullRequest
3 голосов
/ 23 марта 2010

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

Class Friend {string Name {get; set ;} DateTime DOB {get; set ;}}
Class Foe {string Name {get; set ;} string ReasonForDislike {get; set ;}}

Обе части будут иметь строку:

<%= Html.TextBoxFor(model => model.Name) %>

И связанные действия контроллера:

public ActionResult SaveFriend(Friend friend)
public ActionResult SaveFoe(Foe foe)

Моя проблема в том, что оба будут отображаться на моей содержащей странице с одинаковым идентификатором (конечно, плохо по многим причинам). Мне известен атрибут [Bind], который позволяет мне добавить префикс, в результате чего получается код:

public ActionResult SaveFriend([Bind(Prefix = “friend”)] Friend friend)
<%= Html.TextBox("friend.Name", Model. Name) %> //Boo, no TextBoxFor :(

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

<%= Html.ValidationMessage("friend.Name") %>

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

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

Заранее спасибо.

1 Ответ

2 голосов
/ 23 марта 2010

Префикс есть, так что вы можете обернуть ваши объекты во "внешнюю" модель представления.

Предположим, у нас есть:

public class MyViewModel
{
   public Friend friend;
   public Foe foe;
}

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

friend.Name
foe.Name

Затем вы можете использовать атрибут Prefix, на который вы ссылаетесь в своем вопросе, для устранения противоречий между классами Friend и Foe.

...