赏金授予后更新

一个新的解决方案正在解决这个问题。请在此处参考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包含错误,则不会验证类级别的ValidationAttribute。

请考虑以下几点:

[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属性永远不会被验证。

有没有人建议克服这个问题?

编辑:如果您需要有关此问题的更多信息,请在评论中提出,我将非常乐意为您提供任何您需要的其他信息。

问题:

问:“如果属性级检查失败,为什么要对类级检查进行验证为什么很重要?”。

答:“因为这是表单的一部分,用户将信息输入到通过AJAX回发的表单中。当表单返回时,它应显示所有当前问题。”

问:“您在类上放置的EqualTo属性到底是什么?它是一个自定义验证属性吗?如果是,它如何工作?它有什么作用?”

答:EqualTo是一个类级别的ValidationAttribute,它比较类实例的两个属性的值。查找“ PropertiesMustMatchAttribute”以实现类似的实现。

最佳答案

不支持此功能。如果任何属性级别验证失败,则不会执行类级别验证。建议您查看MVC Foolproof Validation。它扩展了MVC验证,以增加对或有属性验证的支持。我认为这将解决此特定情况下的问题。

该项目站点指出它不适用于MVC2 RC,因此您必须下载源代码并使其运行/自行采纳他们的想法。

07-24 17:41
查看更多