我正在使用link text中的MVC验证库。我选择了这个库,因为我也使用.NetTiers,它使用MS企业库验证块生成所有验证属性。
除了模型绑定自动验证对象并填充验证摘要外,它工作正常。我相信这是正常行为。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register([Bind()]NetTiersObject obj)
{
return View();
}
验证库还有一个记录如下的方法:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register([Bind()]NetTiersObject obj)
{
try
{
obj.Validate<NetTiersObject>();
}
catch (EntityValidationException ex)
{
ViewData.ModelState.PopulateWithErrors(ex);
}
return View();
}
这也可以。
我的问题是,在使用验证库的方法时,它会复制错误消息。仅使用模型绑定时,错误消息显得很奇怪。错误在消息中具有属性名称。
所以,我认为我应该要么格式化模型绑定错误消息,要么完全禁用模型绑定。
任何建议,帮助?
感谢。
答案 0 :(得分:0)
你有没有尝试过:
/*At the Point the ModelState should be Valid(TRUE)
because we still didn't enforce any validations */
var v = ModelState.IsValid;
try
{
obj.Validate<NetTiersObject>();
}
catch (EntityValidationException ex)
{
ViewData.ModelState.PopulateWithErrors(ex);
}
并检查v是否为True,它应该是。
如果确实如此,那么obj.Validate<NetTiersObject>();
做错了,因为它只填充了重复的错误。
我的问题是在使用时 验证库的方法吧 复制错误消息。什么时候 只是使用绑定错误的模型 消息看起来很奇怪错误 在邮件中有属性名称。
它很奇怪,因为modelBinding不应该填充模型错误,至少如果您没有使用自定义模型绑定或尝试在不验证字段的情况下保存到数据库中。
答案 1 :(得分:0)
我找到了为什么我的ModelState无效的答案。表单元素与模型不匹配,这是ModelState立即无效的唯一方式。
如果我找到更多细节,我会更新这篇文章。