奖励赏金后更新
一个新的解决方案正在解决这个问题。请在此处参考 ASP.NET MVC 3 Preview 1:http ://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx
查看模型验证改进部分,您将在其中看到我的问题的解决方案。
原帖
参考我之前的文章如何使用 ASP.NET MVC 2 验证两个属性,我在其中询问如何比较两个属性以进行模型验证。
我确实发现答案很有用,但我遇到了一个完全不同的问题:
问题:如果 Property-level ValidationAttribute 包含错误,则 Class-level ValidationAttributes 不会被验证。
请考虑以下几点:
[EqualTo("Email", "EmailConfirm", ErrorMessage = "E-mailadresserne skal være ens")]
[EqualTo("Password", "PasswordConfirm", ErrorMessage = "Adgangskoderne skal være ens")]
[Bind(Exclude="UserId")]
public class EditSiteUser
{
[Required(ErrorMessage="Du skal bekræfte adgangskode")]
public string PasswordConfirm { get; set; }
[Required(ErrorMessage="Du skal bekræfte e-mailadressen")]
[Email(ErrorMessage="Ugyldig e-mailadresse")]
public string EmailConfirm { get; set; }
public int UserId { get; set; }
[Required(ErrorMessage = "Du skal indtaste et brugernavn")]
public string Username { get; set; }
[Required(ErrorMessage = "Du skal indtaste en adgangskode")]
public string Password { get; set; }
[Required(ErrorMessage = "Du skal indtaste en e-mailadresse")]
[Email(ErrorMessage = "Ugyldig e-mailadresse")]
public string Email { get; set; }
}
这里我有两个类级别的属性来验证 EmailConfirm 和 PasswordConfirm。
如果像 Username 这样的字段为空,从而产生错误,则永远不会验证两个 EqualTo 属性。
有没有人有解决这个问题的建议?
编辑:如果您需要有关此问题的更多信息,请在评论中提问,我很乐意为您提供所需的任何其他信息。
问题:
问:“如果属性级别检查失败,为什么类级别检查得到验证很重要?”。
A:“因为这是表单的一部分,用户在表单中输入信息,然后通过 AJAX 回传。当表单返回时,它应该显示所有当前问题。”
问:“您在类中放置的 EqualTo 属性到底是什么?它是自定义验证属性吗?如果是,它是如何工作的?它有什么作用?”
A:EqualTo 是一个类级别的ValidationAttribute,它比较类实例的两个Properties 的值。查找“PropertiesMustMatchAttribute”以获得类似的实现。