【问题标题】:MVC Model BindingMVC 模型绑定
【发布时间】:2009-12-08 08:36:40
【问题描述】:

我正在使用来自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();
}

这也很好用。

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

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

有什么建议吗?

谢谢。

【问题讨论】:

    标签: asp.net-mvc validation model-binding


    【解决方案1】:

    你试过了吗:

        /*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&lt;NetTiersObject&gt;(); 做错了什么,因为它是唯一填充重复错误的。

    我的问题是,当使用 验证库的方法 it 重复错误消息。什么时候 只是使用模型绑定错误 消息看起来很奇怪。错误 在消息中包含属性名称。

    这很奇怪,因为 modelBinding 不应该填充模型错误,至少如果您没有使用自定义模型绑定或尝试在没有验证字段的情况下保存到数据库中。

    【讨论】:

    • 在您的第一个示例中,它立即无效。如果我将 FormCollection 作为操作参数传递,则模型状态是有效的。没有自定义模型绑定,这只是验证时的问题。感谢您的帮助。
    【解决方案2】:

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

    如果我发现更多细节,我会更新这篇文章。

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2011-03-15
      相关资源
      最近更新 更多