【问题标题】:xVal error messages appearing twice出现两次XVAL错误信息
【发布时间】:2009-08-07 01:42:05
【问题描述】:

我正在尝试使用 ASP.NET MVC 2 Preview 1 项目设置 xVal。我基本上遵循http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/ 的示例(到目前为止,仅限服务器端)。

我已经注释了一个 BlogPost 实体,这里是 Post 操作:

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

(请注意,DataAnnotationsValidationRunner 是来自示例博客文章的逐字记录)。当我提交一个完全无效的 BlogPost 表单时,我会收到以下验证错误列表:

  • 需要一个值。
  • 请输入标题
  • 请输入发布日期
  • 请输入一些内容
  • 请输入标题
  • 请输入发布日期
  • 请输入一些内容

我什至不知道第一条消息的用途,但正如您所见,其他错误出现了两次。我究竟做错了什么?或者这是 MVC V2 的问题?

【问题讨论】:

    标签: asp.net-mvc validation data-annotations xval


    【解决方案1】:

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

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

    然后使用您的 XVal 逻辑,您再次请求检查:

    var errors = DataAnnotationsValidationRunner.GetErrors(post);
    

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

    您的代码在 MVC 版本 1 中可以正常工作,因为 public ActionResult Index(BlogPost b) 不会运行 DataAnnotation 规则。如果可以关闭新的 DataAnnotation 逻辑并只使用 XVal,我还没有阅读任何内容。

    Scott's post able preview 1上有更多相关信息

    要找出第一项运行调试并检查 ModelState 上的错误,因为这将告诉您错误与对象上的哪个属性相关。

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

    【讨论】:

    • 是的,就是这样。我实际上并不认为注释的东西会那么容易,哇。无论如何,另一个错误是因为我没有将 Id 值设置为使用私有集(NHibernate POCO)。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2017-02-02
    • 2014-02-21
    • 2019-11-21
    相关资源
    最近更新 更多