0

我正在使用链接文本中的 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();
}

这也很好用。

我的问题是,当使用验证库的方法时,它会重复错误消息。仅使用模型绑定时,错误消息看起来很奇怪。错误在消息中具有属性名称。

所以,我认为我要么需要格式化模型绑定错误消息,要么完全禁用模型绑定。

有什么推荐吗,求助

谢谢。

4

2 回答 2

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 不应该填充模型错误,至少如果您没有使用自定义模型绑定或尝试在不验证字段的情况下保存到数据库中。

于 2009-12-08T19:59:37.433 回答
0

我找到了为什么我的 ModelState 无效的答案。表单元素与模型不匹配,这是 ModelState 立即失效的唯一方法。

如果我找到更多细节,我会更新这篇文章。

于 2009-12-09T01:01:31.887 回答