2011-12-19 11 views
1

私は非常にうまく動作するHtmlHelper用の拡張メソッドを作成しました。IDictionary <string、object>のオーバーロードでHtmlHelperを拡張するには?

public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression) 
{ 
    return EnumDropDownListFor(htmlHelper, expression, null); 
} 

public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, IDictionary<string, object> htmlAttributes) 
{ 
    var items = DoSomething(); 

    return htmlHelper.DropDownListFor(expression, items, htmlAttributes); 
} 

私は私の見解でそれを使用しようとしたとき、私はまだ次の例外だ:

を今私はので、私は次のことを試してみましたので、私はそれにCSSクラスを追加することができたIDictionaryを受け取り、過負荷を作成する必要があります

コンパイルエラー

説明:エラーは、この要求を処理するために必要なリソース のコンパイル時に発生しました。次の具体的な エラーの詳細を確認し、ソースコードを適切に変更してください。

コンパイラエラーメッセージ:CS1928: 「System.Web.Mvc.HtmlHelper」 は「EnumDropDownListFor」と最高の拡張 方法過負荷 「LIMM.Web.HtmlHelpers.HtmlDropDownExtensions.EnumDropDownListFor(システムの定義が含まれていません。 .Web.Mvc.HtmlHelper、 System.Linq.Expressions.Expression>、 System.Collections.Generic.IDictionary)」もちろん、私はこの方法を正しくが、そうグーグルを延長していないよ、いくつかの 無効な引数

を持っていますこれを達成する方法を見つけるのは私の友人ではありません。ちょっとした助けに感謝します。

ありがとうございました。

UPDATE:ビューにコードを入力すると、intellisenseは私に両方のオーバーロードを与えます。アプリケーションを実行すると、エラーが発生します。

+0

を使用してステートメントを追加することを確認しましたあなたの拡張メソッドを見つける方法を知っているあなたのビューに? –

+0

あなたはこの質問を見ましたか? http://stackoverflow.com/questions/7371652/custom-helper-in-asp-net-mvc3 私はそれが役に立ちそうです。 – AnarchistGeek

+0

@ M.Babcock:当然私はやった:)私は元の方法がうまくいったと言ったように、それは問題を抱えている過負荷です。 –

答えて

0

たぶん、あなたが最も一般的な建設を(匿名オブジェクトとしてHTML属性を渡す)を使用してヘルパーを使用しようとしているので、非常におそらくあなたは、このような過負荷必要があります。

public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, object htmlAttributes) 
{ 
    return EnumDropDownListFor(htmlHelper, expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); 
} 

public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, IDictionary<string, object> htmlAttributes) 
{ 
    var items = DoSomething(); 

    return htmlHelper.DropDownListFor(expression, items, htmlAttributes); 
} 
+0

ありがとう、これはうまくいった。なぜそれがこのようなものでなければならないかについての短い説明をすることができれば私は多くの人がそれから恩恵を受けると確信しています。 –

+1

私たちは、html属性を持つオブジェクトを渡すために使用します。今日、オブジェクトからDictionary への暗黙のキャストはありません。したがって、このシグネチャ(オブジェクトとしてのhtml属性)でオーバーロードを作成し、このオブジェクトをDictionaryに変換する元のメソッドを呼び出す必要があります。この変換を実行するには、HTMLHelper.AnonymousObjectToHtmlAttributesメソッドをexacltyで記述しました。 –

関連する問題