我创建了方法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如下图所示:
感谢任何帮助。
答案 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;
}