我按照此处概述的方法来执行此操作。
我在使用 xval 验证下拉选择时遇到问题,MVC 绑定似乎推断出允许操作通过验证的错误,但是模型状态存储了绑定异常并使页面无效 - 所以我得到了操作的情况允许使用无效数据执行,但页面无效,因此导致用户相信验证失败。
这可能会更清楚
这是我的下拉菜单,假设用户什么都没做,所以选择了“请选择”。
Do you like cheese:
<select name="Favourites.Cheese">
<option>Please Select</option>
<option value="1">Yes</option>
<option value="0">No</option>
</select>
<%=Html.ValidationMessage("Favourites.Cheese")%>
这也是来自帖子的控制器操作,MVC 将值 false 映射到 fav.cheese,
public ActionResult Create(Favourites fav)
{
try
{
_favTask.Create(fav);
}
catch (RulesException ex)
{
ex.AddModelStateErrors(ModelState, "Favourites");
}
if(!ModelState.IsValid)
{
//redirect back
}
//other stuff
}
该物业已归属
pulic class Favourites
{
[Required]
public bool Cheese{get;set;}
}
不会抛出异常,因为 fav.cheese 有一个值
public int Create(Favourites fav)
{
var errors = DataAnnotationsValidationRunner.GetErrors(fav);
if (errors.Any())
throw new RulesException(errors);
//create fav
}
但是当焦点返回到控制器时 ModelState.Isvalid 出来为假,所以从重新加载消息The value 'Please Select' is invalid。如何阻止这种情况的发生,以及如何使用 xVal 驱动“请选择一个值”的验证方法?