代码之家  ›  专栏  ›  技术社区  ›  Matthew Groves

xVal错误消息出现两次

  •  1
  • Matthew Groves  · 技术社区  · 17 年前

    http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/ 严格来说(到目前为止,仅限于服务器端)。

    [HttpPost]
    public ActionResult Index(BlogPost b)
    {
        try
        {
            _blogService.Insert(b);
        }
        catch (RulesException ex)
        {
            ex.AddModelStateErrors(ModelState, "");
        }
    
        return (View(b));
    }
    

    服务方法如下:

    public void Insert(BlogPost post)
    {
        var errors = DataAnnotationsValidationRunner.GetErrors(post);
        if(errors.Any())
        {
            throw new RulesException(errors);
        }
    
        _blogRepo.Insert(post);
    }
    

    我甚至不知道第一条消息是什么,但正如你所看到的,其他错误出现了两次。我做错了什么?这是MVC V2的问题吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Nick Clarke    17 年前

    从ASP开始。Net MVC 2 Preview 1我们现在可以开箱即用地获得DataAnnotation验证支持,所以我想你的问题是,当ModelBinder逻辑运行时,它正在应用DataAnnotation规则:

    public ActionResult Index(BlogPost b) //Create BlogPost object and apply rules
    

    var errors = DataAnnotationsValidationRunner.GetErrors(post);
    

    这一点得到了它们以相同顺序重复的事实的支持。

    你的代码在MVC版本1中运行良好,因为 公共行动结果索引(BlogPost b) 不会运行DataAnnotation规则。如果可以关闭新的DataAnnotation逻辑并仅使用XVal,我还没有在任何地方读过。

    Scott's post able preview 1

    [HttpPost]
    public ActionResult Index(BlogPost b)
    {
        try
        {
            _blogService.Insert(b); //Add breakpoint here and check ModelState
        }
        catch (RulesException ex)
        {
            ex.AddModelStateErrors(ModelState, "");
        }
    
        return (View(b));
    }