Asp.net mvc 2 asp.net mvc中的空下拉列表验证

Asp.net mvc 2 asp.net mvc中的空下拉列表验证,asp.net-mvc-2,Asp.net Mvc 2,我有一页,上面有两张表格。其中一个有一个下拉列表: <form ...> <%: Html.DropDownListFor(x => Model.NewForm.FormId, Model.Forms)%> <%: Html.ValidationMessageFor(x => Model.NewForm.FormId, "*")%> <input type="submit" value="Add" /> </form>

我有一页,上面有两张表格。其中一个有一个下拉列表:

<form ...>

<%: Html.DropDownListFor(x => Model.NewForm.FormId, Model.Forms)%>

<%: Html.ValidationMessageFor(x => Model.NewForm.FormId, "*")%>

<input type="submit" value="Add" />
</form>
我注意到,当下拉列表为空时,“form”参数始终为null,ModelState始终有效

[HttpPost]
public ActionResult AddForm([Bind(Prefix="NewForm")]AddFormViewModel form)
{
    if (ModelState.IsValid)
    {
      ... save
    }
    else
    {
        ... show validation error
    }

    return ...
}
当下拉列表不为空时,一切正常,“表单”不为空

下拉列表的值为空时不发送,这是默认行为,但无论如何,如何使验证工作

一些想法:

1我可以添加一个属性来查看模型,这将是页面上的一个隐藏输入,只是为了使模型活页夹工作

2定制模型活页夹

你的想法是什么?

怎么样

[HttpPost]
public ActionResult AddForm(AddFormViewModel form)
{
    if (form!= null && ModelState.IsValid)
    {
      ... save
    }
    else
    {
        ... show validation error
    }

    return ...
}

当您说为空时,您的意思是选择列表中没有选项,或者没有选择任何选项?如果您向选择列表中添加一个默认值,且值=null text=select选项,则null将导致默认ModelBinder使选择成为必需。是的,我知道,但我不想要“--select--”选项。我决定使用一个隐藏的财产。
[HttpPost]
public ActionResult AddForm(AddFormViewModel form)
{
    if (form!= null && ModelState.IsValid)
    {
      ... save
    }
    else
    {
        ... show validation error
    }

    return ...
}