代码之家  ›  专栏  ›  技术社区  ›  Dustin Laine

MVC模型绑定

  •  0
  • Dustin Laine  · 技术社区  · 15 年前

    link text . 我选择这个库是因为我还使用.NetTiers,它使用MS Enterprise library验证块生成所有验证属性。

    [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();
    }
    

    这也很好。

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

    有什么建议吗?

    谢谢

    2 回复  |  直到 15 年前
        1
  •  0
  •   JOBG    15 年前

        /*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);
        }
    

    如果这是真的那么 obj.Validate<NetTiersObject>(); 是做错事,因为它是唯一填充重复错误的方法。

    我的问题是当使用 验证库的方法 复制错误消息。什么时候 仅使用绑定错误的模型 在消息中包含属性名称。

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

        2
  •  0
  •   Dustin Laine    15 年前

    我找到了ModelState无效的原因。表单元素与模型不匹配,这是ModelState立即无效的唯一方式。