MVC3 - получить атрибут данных в html.helper - PullRequest
2 голосов
/ 08 октября 2011

Я пытаюсь создать пользовательский атрибут для управления форматированием в пользовательском вспомогательном объекте HTML.Исходный код для моего пользовательского класса селектора (Код из http://forums.asp.net/t/1649193.aspx/1/10).

        public static MvcHtmlString DdUovFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionLabel, IDictionary<string, object> htmlAttributes)
    {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        var m = expression.Body.GetType();

        IDictionary<string, object> validationAttributes = htmlHelper
            .GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression), metadata);

        if (htmlAttributes == null)
            htmlAttributes = validationAttributes;
        else
            htmlAttributes = htmlAttributes.Concat(validationAttributes).ToDictionary(k => k.Key, v => v.Value);

        return SelectExtensions.DropDownListFor(htmlHelper, expression, 
               selectList, optionLabel, htmlAttributes);
    }

Мой пользовательский атрибут:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | 
      AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class LookUpAttribute : Attribute
{
    public LookUpAttribute(Type providerName)
    {
        this.providerName = providerName;
    }
    protected ILookup providerName;
}

Моя проблема в том, что я не могу понять, как получить мойнастраиваемый атрибут в методе HTML-помощника.

1 Ответ

2 голосов
/ 08 октября 2011

Лучший способ добиться этого - реализовать для вашего атрибута IMetadataAware. При реализации метода OnMetadataCreated вы должны добавить значения в словарь metadata.AdditionalValues. Затем вы можете получить значение в вашем помощнике или в любом другом месте, где у вас есть доступ к ModelMetadata.

Обратите внимание, что это решение является предпочтительным, поскольку оно фактически не кодирует какую-либо информацию о том факте, что ваши метаданные управляются атрибутами.

...