2012-04-13 20 views
9

私はASP.NET MVC3プロジェクトを持っていますが、HTMLを返す拡張メソッドをいくつか書いていますが、それらをレンダリングするにはUrlHelperが必要です。これを行うには、UrlHelperを拡張していますが、UrlHelperはHTMLでHTMLとHtmlHelperを処理する必要があるため、セマンティクスが嫌いです。私はUrlHelperの代わりにこのメソッドでHtmlHelperを拡張したいと思います。HtmlHelperの拡張機能を書くときにUrlHelperを呼び出す方法

私の問題は、今私はどのようにHtmlHelperの拡張メソッドからUrlHelperにアクセスするのか、それは可能ですか?または、私はUrlHelper拡張機能に固執する必要があります。

私はUrlヘルパーを引数として送信できることは知っていますが、私はこの解決策を非常に気に入らないのです。次のコード

は私が話しています拡張メソッドのサンプルです:

public static HtmlString AnchorLink(this UrlHelper url, string text, string action, string anchor) { 
    return new HtmlString(string.Format("<a href=\"{0}#{2}\">{1}</a>", url.Action(action), text, anchor)); 
} 

おかげ

+0

が重複する可能性をインスタンス化できHTMLヘルパー](http://stackoverflow.com/questions/1443647/generate-url-in-html-helper) – Marijn

答えて

20

あなたは[でURLを生成するUrlHelper自分...

public static HtmlString AnchorLink(this HtmlHelper html, string text, string action, string anchor) { 
    var urlHelper = new UrlHelper(html.ViewContext.RequestContext); 
} 
+1

興味深い考えは、新しいヘルパー_fast_操作のインスタンスです。 (例えば 'new List ()'のような)?あなたは私の問題の解決策としてそれをお勧めしますか?または、UrlHelperを引数として指定すると、それ以上の結果が得られますか? – NightElfik

+3

パフォーマンス面では、ほとんど気づかないでしょう。コンストラクタは、プライベート変数を設定する以外は特別なことをしません。あなたのビューの 'InitHelpers'はまったく同じです、つまりコンストラクタを呼び出します。 UrlHelperの余分なパラメータがビューを「混乱させる」という事実を無視したい場合、それをパラメータとして追加することができます。しかし、私はパフォーマンスの事実を無視し、読みやすいようにします。 – Ropstah

関連する問題