2012-04-13 24 views
9

我有ASP.NET MVC3項目,我正在寫一些擴展方法返回HTML,但我需要UrlHelper來渲染它們。爲此,我擴展了UrlHelper,但我不喜歡語義,因爲UrlHelper應該使用URL和HtmlHelper與HTML一起工作。我想用這種方法而不是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

的可能重複[URL生成在HTML助手](http://stackoverflow.com/questions/1443647/generate-url-in-html-helper) – Marijn 2014-05-30 14:03:34

回答

20

你可以實例化一個UrlHelper自己......

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

有趣的想法,是實例化的新幫手_fast_操作(例如'新列表()')?你會推薦它作爲解決我的問題?或者提供UrlHelper作爲參數將是_better_? – NightElfik 2012-04-13 10:13:09

+3

從表現上看,這實際上是不可忽略的。除了設置一些私有變量外,構造函數不做任何特殊的事情。你的視圖的'InitHelpers'完全一樣,即調用構造函數。如果您想忽略UrlHelper的額外參數會「混亂」您的視圖的事實,則可以將其添加爲參數。不過,我會忽略性能事實併爲可讀性而努力。 – Ropstah 2012-04-13 10:16:24