ModelBinding общий тип в MVC3 - PullRequest
       5

ModelBinding общий тип в MVC3

0 голосов
/ 05 июня 2011

На мой взгляд, я использую универсальный тип для модели, ItemModel<T>.

Это позволяет мне иметь базовый тип на моей модели, и он отлично работает. В пределах ItemModel<T> я присоединяю фактическую сущность T к свойству под названием «Item».

Допустим, я загружаю элемент пользователя: на мой взгляд, я хотел бы сделать что-то вроде этого:

<%: Html.TextBoxFor(Model => Model.Item.NickName, 
new { id="NickName", name="NickName" })%>

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

public ActionResult Login(User user, string redirectUrl)

и, следовательно, ничего не загружается в мой объект User. Есть ли способ это исправить? Я искал для написания пользовательской модели привязки или поставщика значений, но это выглядит как много работы для чего-то такого простого. Кроме того, я действительно не уверен, так ли это.

Вся помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 05 июня 2011

смените метод вашего действия с

public ActionResult Login(User user, string redirectUrl)

Для

public ActionResult Login(User Item, string redirectUrl)

таким образом, модельер сможет найти свойства объекта User с префиксом Item

0 голосов
/ 05 июня 2011

вы можете создать свои вспомогательные методы для создания этого текстового поля

public static MVCString MyTextBox<T>(this HtmlHelper html,T _item,String PropertyName)
{
  TagBuilder myTag  = new TagBuilder("input");
  myTag.Attributes("type")="Text";
  myTag.Attributes("id")=PropertyName;
  myTag.Attributes("name")=PropertyName;
  myTag.Attributes("value")=typeof(_item).GetProperty(PropertyName).GetValue(_item,null).toString();
  Return MvcHtmlString.Create(selectTag.ToString())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...