Bounty获奖后更新
一个新的解决方案正在解决这个问题.请参考ASP.NET MVC 3 Preview 1:http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx
查看模型验证改进部分,您将在其中看到我的问题的解决方案.
原帖
参考我之前的How to validate two properties with ASP.NET MVC 2帖子,我问我如何比较模型验证的两个属性.
我确实觉得这个答案很有用,但我遇到了一个完全不同的问题:
问题:如果属性级ValidationAttribute包含错误,则不验证类级别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; } }
在这里,我有两个类级别的attibutes验证EmailConfirm和PasswordConfirm.
如果像Username这样的字段为空,从而产生错误,则永远不会验证两个EqualTo属性.
有没有人有建议克服这个问题?
编辑:如果您需要有关此问题的更多信息,请在评论中提问,我将非常乐意为您提供所需的任何其他信息.
问题:
问:“如果属性级别检查失败,为什么对类级别检查进行验证很重要?”.
答:“因为这是表单的一部分,用户将信息输入到通过AJAX回发的表单中.当表单返回时,它应显示所有当前问题.”
问:“你在这个类上放置的EqualTo属性到底是什么?它是一个自定义验证属性吗?如果是,它是如何工作的?它做了什么?”
答:EqualTo是一个类级ValidationAttribute,它比较类实例的两个Properties的值.查找“PropertiesMustMatchAttribute”以获得类似的实现.