Как оценить аннотации данных в модели во время расширения HtmlHelper? - PullRequest
0 голосов
/ 21 марта 2012

У меня есть метод расширения HtmlHelper, который выглядит следующим образом:

public static MvcHtmlString TextBoxWithMaxLengthFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, string name)
{
    return html.TextBoxFor(expression, new { maxlength = 50 });
}

Я бы хотел заменить 50 значением аннотации данных StringLength для данного свойства, если оно определено. Как мне получить атрибуты объекта?

1 Ответ

2 голосов
/ 21 марта 2012

Нашел ответ:

public static MvcHtmlString TextBoxWithMaxLengthFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
{
    var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
    var property = html.ViewData.Model.GetType().GetProperty(metadata.PropertyName);
    var attributes = property.GetCustomAttributes(typeof(StringLengthAttribute), true);
    var maxLength = attributes.Length > 0 ? ((StringLengthAttribute)attributes[0]).MaximumLength : 50;
    return html.TextBoxFor(expression, new { maxlength = maxLength });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...