首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在HTML帮助器中生成URL

在HTML帮助器中生成URL
EN

Stack Overflow用户
提问于 2009-09-18 10:16:13
回答 3查看 62.8K关注 0票数 169

通常,在ASP.NET视图中,可以使用以下函数来获取URL (而不是<a>):

代码语言:javascript
运行
复制
Url.Action("Action", "Controller");

但是,我找不到如何从自定义HTML帮助器中执行此操作。我有过

代码语言:javascript
运行
复制
public class MyCustomHelper
{
   public static string ExtensionMethod(this HtmlHelper helper)
   {
   }
}

helper变量有Action和GenerateLink方法,但它们会生成<a>。我深入研究了ASP.NET的MVC源代码,但找不到一种简单的方法。

问题是上面的Url是视图类的成员,为了实例化它需要一些上下文和路由映射(我不想处理这些内容,也不应该处理这些内容)。或者,HtmlHelper类的实例也有一些上下文,我假设它是Url实例的上下文信息子集的子集(但我也不想处理它)。

总而言之,我认为这是可能的,但既然我能看到的所有方法都涉及到一些或多或少的内部ASP.NET内容的操作,我想知道是否有更好的方法。

编辑:以为例,我看到的一种可能性是:

代码语言:javascript
运行
复制
public class MyCustomHelper
{
    public static string ExtensionMethod(this HtmlHelper helper)
    {
        UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
        urlHelper.Action("Action", "Controller");
    }
}

但这似乎并不正确。我不想自己处理UrlHelper的实例。肯定有更简单的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-18 10:27:58

您可以在html helper扩展方法中像这样创建url helper:

代码语言:javascript
运行
复制
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var url = urlHelper.Action("Home", "Index")
票数 220
EN

Stack Overflow用户

发布于 2013-01-24 18:20:47

您还可以使用UrlHelper公共和静态类获取链接:

代码语言:javascript
运行
复制
UrlHelper.GenerateUrl(null, actionName, controllerName, null, null, null, routeValues, htmlHelper.RouteCollection, htmlHelper.ViewContext.RequestContext, true)

在本例中,您不必创建新的UrlHelper类,这可能会带来一些好处。

票数 22
EN

Stack Overflow用户

发布于 2013-05-29 19:13:32

下面是我的小扩展方法,用于获取HtmlHelper实例的UrlHelper

代码语言:javascript
运行
复制
  public static partial class UrlHelperExtensions
    {
        /// <summary>
        /// Gets UrlHelper for the HtmlHelper.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper.</param>
        /// <returns></returns>
        public static UrlHelper UrlHelper(this HtmlHelper htmlHelper)
        {
            if (htmlHelper.ViewContext.Controller is Controller)
                return ((Controller)htmlHelper.ViewContext.Controller).Url;

            const string itemKey = "HtmlHelper_UrlHelper";

            if (htmlHelper.ViewContext.HttpContext.Items[itemKey] == null)
                htmlHelper.ViewContext.HttpContext.Items[itemKey] = new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection);

            return (UrlHelper)htmlHelper.ViewContext.HttpContext.Items[itemKey];
        }
    }

将其用作:

代码语言:javascript
运行
复制
public static MvcHtmlString RenderManagePrintLink(this HtmlHelper helper, )
{    
    var url = htmlHelper.UrlHelper().RouteUrl('routeName');
    //...
}

(我张贴这篇文章仅供参考)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1443647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档