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

JLe*_*JLe 19 c# asp.net-mvc asp.net-mvc-5 compare-attribute

重现步骤:

  1. 使用个人用户帐户创建新的MVC 5项目.
  2. 查看属性中ErrorMessage指定RegisterViewModel的内容ConfirmPassword.它是"密码和确认密码不匹配.".
  3. 构建并运行应用程序,并尝试使用不匹配的密码进行注册.我将错误消息"'确认密码'和'密码'不匹配.",而不是模型中指定的那个.

看起来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; }
Run Code Online (Sandbox Code Playgroud)

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

自定义ErrorMessage的预期结果

相反,我得到这个"默认"错误消息:

标准ErrorMessage的实际结果

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

vie*_*tdv 14

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

更改:

[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
Run Code Online (Sandbox Code Playgroud)

至:

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

它的工作原理!

  • 是的,我知道,但这似乎是一个糟糕的解决方法,因为不推荐使用`System.Web.Mvc.Compare`. (8认同)

Joh*_*n H 8

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

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


Vah*_*idN 7

这是2013 年的一个旧错误.请尝试以下命令来更新项目的所有依赖项:

PM> update-package
Run Code Online (Sandbox Code Playgroud)