Проверка формы со сложным типом недействительна - PullRequest
0 голосов
/ 02 марта 2011

У меня есть форма, использующая эту модель:

public class MyModel
{
  public User SalesManager {get;set;}
  public string Title {get;set;}
  ...
}

отображается так, используя DropDown, учитывая список пользователей в расширении HtmlHelper:

<label for="SalesManager">Sales Manager</label>
<select id="SalesManager" name="SalesManager">
  <option value="7">James Morrison</option>
  <option selected="selected" value="300">Ray Manzarek</option>
  <option value="302">Robby Krieger</option>
  <option value="302">John Densmore</option>
</select>

и подобное действие:

[HttpPost]
public ActionResult SomeAction(FormCollection form)
{
  ...
}

Я получаю сообщение об ошибке ModelState: The value '302' is invalid для свойства SalesManager. Как я могу принять только значение типа int и побеспокоиться о создании экземпляра моего пользователя позже (например, в ModelBinder). Или я просто неправильно это подхожу?

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

Ваш HTML должен выглядеть так:

<select id="SalesManager_UserId" name="SalesManager.UserId">

потому что вы не можете значение 302 для сложного объекта, такого как User.

Так что помощник должен выглядеть так:

<%= Html.DropDownListFor(x => x.User.UserId, Model.PossibleValues) %>
0 голосов
/ 02 марта 2011

Вам нужно будет объявить свойство int в MyModel, скажем, SelectedUser, и изменить отображаемое выделение на

<select id="SelectedUser" name="SelectedUser">

Если вы используете Html-помощники, вы можете сделать это с помощью.

HtmlHelper.ListBoxFor("SelectedUser", Model.YourSelectList")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...