复杂类型的表单验证无效

时间:2011-03-02 18:04:58

标签: asp.net-mvc validation

我有一个使用此模型的表单:

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

使用DropDown进行渲染,给出HtmlHelper扩展中的Users列表:

<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)
{
  ...
}

我收到了SalesManager属性的验证ModelState错误:The value '302' is invalid。我怎样才能接受一个int值,并担心以后实例化我的用户(例如在ModelBinder中)。或者我只是接近这个错误?

2 个答案:

答案 0 :(得分:0)

您需要在MyModel上声明一个int属性,比如SelectedUser,并将渲染的选择更改为

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

如果您使用的是Html助手,可以使用。

HtmlHelper.ListBoxFor("SelectedUser", Model.YourSelectList")

答案 1 :(得分:0)

您的HTML应如下所示:

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

因为您不能将值302添加到User等复杂对象。

所以助手应该是这样的:

<%= Html.DropDownListFor(x => x.User.UserId, Model.PossibleValues) %>