DropDownListFor在验证中丢失列表绑定

时间:2013-12-29 14:14:22

标签: asp.net-mvc-3 razor fluentvalidation

我正在使用fluentvalidation和mvc3。我有一个下拉列表,它运作良好。我想测试我的验证,它的工作原理除了验证下拉列表是空的吗?

我的意思是,如果我故意提交,而默认的SelectListItem请选择...值为零,则提交失败验证并且消息显示等但我的下拉列表现在是空的?

我的控制器代码填充列表:

if (extforum.Count > 0)
            {
                foreach (var s in extforum)
                    model.ExternalSubscription.AvailableForums.Add(new SelectListItem(){ Text = s.ForumName, Value = s.Id.ToString() });
            }
            else
                model.ExternalSubscription.AvailableForums.Add(new SelectListItem() { Text = "None Available", Value = "0" });

            //add default value
            model.ExternalSubscription.AvailableForums.Add(new SelectListItem() { Text="Please Select", Value="0", Selected=true });

我的剃刀代码:

<tr>
        <td>
            @Html.LabelFor(model => model.ForumName):
        </td>
        <td>
            @Html.DropDownListFor(model => model.SelectedExtBoardId, Model.AvailableForums)
            @Html.RequiredHint()
            @Html.ValidationMessageFor(model => model.ExtForumBoardId)
        </td>
    </tr>

我的验证码:

RuleFor(x => x.ExtForumBoardId)
            .NotEqual(0).WithMessage("Blah"));

1 个答案:

答案 0 :(得分:2)

HttpPost控制器操作中,您必须在视图模型上填充AvailableForums集合属性,方法与呈现表单的Get操作相同。如果您打算重新显示包含下拉列表的同一视图,则必须执行此操作。这通常发生在验证错误的情况下。不要忘记,当您提交表单时,只会将下拉列表中的选定值发送到服务器。如果您打算重新显示相同的视图,则需要从后端检索所有可能值的集合。