如何在为HtmlHelper编写扩展时调用UrlHelper

Nig*_*fik 11 extension-methods asp.net-mvc-3

我有ASP.NET MVC3项目,我正在编写一些返回HTML的扩展方法,但我需要UrlHelper来渲染它们.要做到这一点,我正在扩展UrlHelper,但我不喜欢语义,因为UrlHelper应该使用URL和HtmlHelper与HTML.我想用这种方法扩展HtmlHelper而不是UrlHelper.

我的问题是我现在不知道如何从HtmlHelper的扩展方法访问UrlHelper,它甚至可能吗?或者我必须坚持使用UrlHelper扩展.

我知道我可以发送Url helper作为参数,但我不太喜欢这个解决方案.

以下代码是我正在讨论的扩展方法的示例:

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));
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Rop*_*tah 23

你可以UrlHelper自己实例化......

public static HtmlString AnchorLink(this HtmlHelper html, string text, string action, string anchor) {
    var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
}
Run Code Online (Sandbox Code Playgroud)

  • 在性能方面,它实际上是不可察觉的.除了设置一些私有变量之外,构造函数没有做任何特殊操作.视图的`InitHelpers`完全相同,即调用构造函数.如果您想忽略UrlHelper的额外参数将"混乱"您的视图这一事实,您可以将其添加为参数.但是我会忽略性能事实并考虑可读性. (3认同)