2012-04-13 79 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