Asp.net mvc 复杂类型的表单验证无效

Asp.net mvc 复杂类型的表单验证无效,asp.net-mvc,validation,Asp.net Mvc,Validation,我有一个使用此模型的表单: public class MyModel { public User SalesManager {get;set;} public string Title {get;set;} ... } 使用给定HtmlHelper扩展中的用户列表的下拉列表呈现如下: <label for="SalesManager">Sales Manager</label> <select id="SalesManager" name="Sales

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

public class MyModel
{
  public User SalesManager {get;set;}
  public string Title {get;set;}
  ...
}
使用给定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>

我得到一个验证
ModelState
错误:
值“302”对于SalesManager属性无效。我怎么能只接受一个int值,而担心以后实例化我的用户(例如在ModelBinder中)。还是我的做法不对?

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

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

您的HTML应该如下所示:

[HttpPost]
public ActionResult SomeAction(FormCollection form)
{
  ...
}
<select id="SalesManager_UserId" name="SalesManager.UserId">
<%= Html.DropDownListFor(x => x.User.UserId, Model.PossibleValues) %>

是否有一个IValueProvider或ModelBinder可以用于在属性级别处理此问题?@mxmissile,我不明白你的意思。您有一个视图模型=>使用强类型助手,它将负责生成正确的标记。
<%= Html.DropDownListFor(x => x.User.UserId, Model.PossibleValues) %>