20

重现步骤:

  1. 使用个人用户帐户创建一个新的 MVC 5 项目。
  2. 查看ErrorMessage指定RegisterViewModelConfirmPassword属性。它是“密码和确认密码不匹配。”。
  3. 构建并运行应用程序,并尝试使用不匹配的密码进行注册。我将看到错误消息“'Confirm password' and 'Password' do not match.”,而不是模型中指定的错误消息。

似乎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; }

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

自定义 ErrorMessage 的预期结果

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

带有标准 ErrorMessage 的实际结果

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

4

4 回答 4

16

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

改变:

[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.")]

它正在工作!

于 2013-11-15T16:11:45.710 回答
8

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

实际上,我刚刚四处搜索以查找更多信息,我发现它已作为 codeplex 上的错误提交。8天前上报了,已经有人指派了。您可以在此处找到错误报告。

于 2013-11-15T19:19:08.450 回答
7

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

PM> update-package
于 2014-05-11T12:14:43.923 回答
-1

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

于 2017-05-11T23:18:11.587 回答