从ASP.NET MVC 3中的RequiredAttribute加入时,客户端验证不起作用?

Ami*_*imi 5 asp.net-mvc data-annotations asp.net-mvc-3

我在ASP.NET MVC3中创建了一个这样的继承属性:

public sealed class RequiredFromResourceAttribute : RequiredAttribute
{
    public RequiredFromResourceAttribute(string errorResourceName, string errorResourceTypeName)
    {
        this.ErrorMessageResourceName = errorResourceName;
        this.ErrorMessageResourceType = Type.GetType(errorResourceTypeName);
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

[RequiredFromResource("Title", "Resources.Resource, MyProject.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
public string Title { get; set; }
Run Code Online (Sandbox Code Playgroud)

它不起作用,MVC忽略了它.然后我创建一个更简单的类,它继承自RequiredAttribute,如下所示:

public class MyRequiredAttribute : RequiredAttribute
{
}
Run Code Online (Sandbox Code Playgroud)

我就像我说的那样使用它.但它没有再起作用.

尽管如此,所有这些方式都完美地适用于"DisplayNameAtrribute".

问题是什么?

Ski*_*ris 3

您可以通过在 Global.asax 中添加以下代码来解决此问题:(在此处找到答案)

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredLocalizableAttribute), typeof(RequiredAttributeAdapter));
Run Code Online (Sandbox Code Playgroud)

或者,使用 marcind 的解决方案,我发现 的构造函数ModelClientValidationRequiredRule需要错误消息。以下是包含该字段的显示名称的更新版本:

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        string msg = FormatErrorMessage(metadata.GetDisplayName());
        yield return new ModelClientValidationRequiredRule(msg);
    }
Run Code Online (Sandbox Code Playgroud)