从代码访问视图模型所需的错误消息数据注释属性 - MVC,Razor

时间:2015-09-24 12:55:03

标签: c# .net asp.net-mvc razor model-view-controller

我创建了方法ExtendedTextBoxFor,我想访问我作为参数发送的属性的视图模型消息。我可以毫无问题地访问IsRequired属性,但错误消息似乎是非公共属性,有没有办法访问它?

到目前为止我有这个:

public static MvcHtmlString ExtendedTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

        if (metadata.IsRequired)
        {
            //Read error message from ViewModel
        }

        return InputExtensions.TextBoxFor<TModel, TProperty>(htmlHelper, expression, (string)null, htmlAttributes);
    }

错误消息在元数据中&gt; PrototypeCache&gt;必需&gt; ErrorMessage如下图所示:

Wanted value

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我最终得到了这个以防有人需要它。谢谢大家的帮助

private static string GetErrorMessage(ModelMetadata metadata)
    {
        string retVal = String.Empty;

        var customTypeDescriptor = new AssociatedMetadataTypeTypeDescriptionProvider(metadata.ContainerType).GetTypeDescriptor(metadata.ContainerType);
        if (customTypeDescriptor != null)
        {
            var descriptor = customTypeDescriptor.GetProperties().Find(metadata.PropertyName, true);
            var req = (new List<Attribute>(descriptor.Attributes.OfType<Attribute>())).OfType<RequiredAttribute>().FirstOrDefault();

            if (req != null)
                retVal = req.ErrorMessage;
        }

        return retVal;
    }