如何在ASP.NET MVC CustomValidation中指定错误成员密钥?

Evg*_*nyt 7 asp.net validation asp.net-mvc

我正在尝试添加CustomValidation并使其返回错误

Html.ValidationMessageFor(m => m.SubleaseCompany)

[CustomValidation(typeof(CreateSpaceModelValidation), "ValidateCreateSpaceModel")]
public class CreateSpaceModel
{
    public Building Building { get; set; }
    public Space Space { get; set; }

    public string SubleaseCompany { get; set; }
}

public class CreateSpaceModelValidation
{
    public static ValidationResult ValidateCreateSpaceModel(CreateSpaceModel model)
    {
        return new ValidationResult("You should specify Sublease Contact", new[] { "SubleaseCompany" }).;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用ValidationResult构造函数(memberNames)的第二个参数,但这似乎不起作用.

tke*_*ood 8

看起来MVC团队从未实现过MemberNames参数的功能.请参阅以下文章.... http://devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2

在某些情况下,您可能想要使用ValidationResult的第二个构造函数重载,它接受IEnumerable的成员名称.例如,您可能决定要在两个要比较的字段上显示错误消息,因此您将代码更改为:

return new ValidationResult(
    FormatErrorMessage(validationContext.DisplayName),
Run Code Online (Sandbox Code Playgroud)

new [] {validationContext.MemberName,OtherProperty});

如果你运行你的代码,你会发现绝对没有区别.这是因为尽管存在这种重载并且可能在.NET框架的其他地方使用,但MVC框架完全忽略了ValidationResult.MemberNames.