2011-10-07 11 views
2

カスタムHTMLヘルパーオブジェクトの書式を制御するカスタム属性を作成しようとしています。カスタムセレクタクラスのソースコードは、(コードはhttp://forums.asp.net/t/1649193.aspx/1/10です)。MVC3 - html.helperのデータ属性を取得

 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ヘルパーメソッド内で私のカスタム属性を取得する方法を見つけ出すことができないということです。

答えて

2

これを実現する最も良い方法は、属性がIMetadataAwareを実装することです。 OnMetadataCreatedメソッドの実装では、metadata.AdditionalValues辞書に値を追加する必要があります。ヘルパー内の値、またはModelMetadataにアクセスできる他の場所の値を取得できます。

このソリューションは、メタデータが属性によって駆動されているという事実に関する情報を実際にはエンコードしないため、この方法が推奨されます。

関連する問題