通过mvc ValidationAttribute扩展名向字段添加自定义属性

时间:2012-03-29 16:58:50

标签: model-view-controller validation tags required wai-aria

因此,我想要添加到所有必填字段的自定义属性存在问题。现在,我想知道是否可以节省大量时间并将其添加到自定义必需属性中,而不是扩展所有帮助器类以将此属性包含在输入中。

这样的事情:

模型:

[MyCustomRequiredValidator]< - 我想在validationAttribute扩展中添加它 public int? MyField的

我显然不能只通过ModelClientValidationRule添加它,因为它在属性前面加上data-val-这是不行的,但我似乎无法访问属性本身。我尝试过使用metadata.AdditionValue.add,但没有欢乐。

我想添加的属性是aria-required =“true”,用于支持屏幕阅读器。

这可能吗?

任何建议都会很棒,因为我碰壁了。

感谢您的光临。

1 个答案:

答案 0 :(得分:1)

好的,我找到了一个解决方案。我通过创建元数据时所有必需的验证器向元数据添加了一个标记(我还必须继承类声明中的IMetadataAware接口):

public void OnMetadataCreated(ModelMetadata metadata) {
    metadata.AdditionalValues.Add("AriaRequired", "true");
}

然后,我扩展了所有输入字段助手以检查此值,并通过检查上述属性的存在性来为输入添加自定义属性,在本例中为AriaRequired。

if (htmlAttributes == null) htmlAttributes = new Dictionary<string, object>();

    if (!htmlAttributes.ContainsKey("aria-required"))
    {
        ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        htmlAttributes.Add("aria-required", metaData.IsAriaRequiredValue());
    }
}

希望这有助于人们: - )