自定义ErrorMessage for Compare属性不起作用

时间:2013-11-14 12:58:00

标签: c# asp.net-mvc asp.net-mvc-5 compare-attribute

重现的步骤:

  1. 使用个人用户帐户创建新的MVC 5项目。
  2. 查看ErrorMessage属性RegisterViewModel中指定的ConfirmPassword。它是“密码和确认密码不匹配。”。
  3. 构建并运行应用程序,并尝试使用不匹配的密码进行注册。我会将错误消息“'确认密码'和'密码'不匹配。”而不是模型中指定的那个。
  4. 似乎ErrorMessage属性上的自定义Compare属性无效。即使我指定了ErrorMessage,验证仍会显示某种默认消息。

    此工作与System.Web.Mvc.CompareAttribute一起使用,但现在已弃用,您应该使用显示此问题的System.ComponentModel.DataAnnotations.CompareAttribute

    我将Compare属性添加到属性并指定ErrorMessage,如下所示:

    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match. I'll even add some random text!")]
    public string ConfirmPassword { get; set; }
    

    预期的结果是(但这不是我得到的):

    Expected result with custom ErrorMessage

    相反,我收到此“默认”错误消息:

    Actual result with standard ErrorMessage

    禁用客户端验证。我错过了什么吗?此示例取自MVC 5模板,其中个人用户帐户作为身份验证。

4 个答案:

答案 0 :(得分:14)

我有同样的问题,解决方案:

更改:

[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]

要:

[System.Web.Mvc.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]

它正在运作!

答案 1 :(得分:8)

我认为这是一个错误。 (编辑:是的。)我也能够重现这一点。事实上,启用客户端验证的行为完全相同。如果你看一下生成的HTML,你会发现它甚至没有生成自定义错误字符串 - 它总是会发出默认错误字符串。

实际上,我刚刚搜索了一下以查找更多信息,我发现它已作为codeplex上的错误提交。据报道,8天前有人被分配到它。您可以找到错误报告here

答案 2 :(得分:7)

2013年为old bug。请尝试以下命令更新所有project's dependencies

PM> update-package

答案 3 :(得分:-1)

请改用System.ComponentModel.DataAnnotations.Compare。 由于System.Web.Mvc.Compare已过时,因此上述compare属性执行相同的工作。