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