1

我正在尝试为 ASP.NET MVC 项目创建自己的模型验证属性。我已经遵循了这个问题的建议,但看不到如何@Html.EditorFor()识别我的自定义属性。我需要在 web.config 的某个地方注册我的自定义属性类吗?对此答案的评论似乎在问同样的事情。

仅供参考,我创建自己的属性的原因是因为我想从 Sitecore 检索字段显示名称和验证消息,并且不想沿着创建具有大量静态方法的类来表示每个文本的路线财产,如果我要使用,这是我必须做的

public class MyModel
{
    [DisplayName("Some Property")]
    [Required(ErrorMessageResourceName="SomeProperty_Required", ErrorMessageResourceType=typeof(MyResourceClass))]
    public string SomeProperty{ get; set; }
}

public class MyResourceClass
{
    public static string SomeProperty_Required
    {
        get { // extract field from sitecore item  }
    }

    //for each new field validator, I would need to add an additional 
    //property to retrieve the corresponding validation message
}
4

1 回答 1

1

这个问题在这里得到了回答:

如何为 MVC 创建自定义验证属性

为了让您的自定义验证器属性起作用,您需要注册它。这可以在 Global.asax 中使用以下代码完成:

public void Application_Start()
{
    System.Web.Mvc.DataAnnotationsModelValidatorProvider.RegisterAdapter(
        typeof (MyNamespace.RequiredAttribute),
        typeof (System.Web.Mvc.RequiredAttributeAdapter));
}

(如果您使用的是WebActivator,您可以将上述代码放入App_Start文件夹中的启动类中。)

我的自定义属性类如下所示:

public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
    private string _propertyName;

    public RequiredAttribute([CallerMemberName] string propertyName = null)
    {
        _propertyName = propertyName;
    }

    public string PropertyName
    {
        get { return _propertyName; }
    }

    private string GetErrorMessage()
    {
        // Get appropriate error message from Sitecore here.
        // This could be of the form "Please specify the {0} field" 
        // where '{0}' gets replaced with the display name for the model field.
    }

    public override string FormatErrorMessage(string name)
    {
        //note that the display name for the field is passed to the 'name' argument
        return string.Format(GetErrorMessage(), name);
    }
}
于 2013-10-30T14:58:24.363 回答