1

我正在尝试在视图中使用 Html.RouteLink 来生成指向另一个页面上命名锚点的链接。RouteLink 有一些包含片段选项的定义,但我试图弄清楚是否有另一种方法。

public static string RouteLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string routeName,
    string protocol,
    string hostName,
    string fragment,
    Object routeValues,
    Object htmlAttributes
)

是显而易见的解决方案,但看起来有点笨拙。我希望能够做类似的事情

Html.RouteLink("Looga", new { Controller = "Cooga", Action = "Aooga", Fragment = "Fooga" })

并获得回报

<a href="/Cooga/Aooga#Fooga">Looga</a>

这是可能的还是我需要指定 URL 的每一小部分以使用内置帮助程序获取片段。我也可以像手动一样

<a href="<%= Url.RouteUrl(new { Controller = "Cooga", Action = "Aooga" }) %>#Fooga>Looga</a>

但似乎 RouteLink 应该能够更优雅地处理。

4

2 回答 2

2

编辑以考虑主要帖子编辑

Html.RouteLink("Looga",
new { Controller = "Cooga", Action = "Aooga" }, new { Fragment = "Fooga" })

此代码将当前产生

<a href="/Cooga/Aooga" Fragment="Fooga">Looga</a>

不是你想要的。相反,您可以为 RouteLink 编写自己的扩展方法,如下所示...

public static class RouteLinkExtensions
{
    public static string RouteLink( 
        this HtmlHelper htmlHelper, 
        string linkText, 
        object routeValues, 
        string fragment)
    {
        // There's probably better ways to do the implementation, but you get the idea
        var url = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        return string.Format("<a href=\"{0}#{1}>{2}</a>",
                                url.RouteUrl(routeValues), 
                                fragment,
                                linkText); 
    }
}

这将允许您在页面中使用对 RouteLink 的干净调用:-)

Html.RouteLink( 
    "Looga",  
    new { Controller = "Cooga", Action = "Aooga" }, 
    "Fooga")
于 2010-02-19T00:20:26.553 回答
0

+1 拉塞尔。

这是他的扩展的一个稍微编辑过的版本,我改变了它以适应我的目的......我想我会发布它以防它帮助某人。

我所做的更改:

  • 它现在返回 Html 字符串而不是字符串,以便您可以使用它将链接直接呈现到页面中。

  • 我将其更改为接受路由名称而不是 routevalues 对象

  • 我也改变了它,如果你传入的片段是空的,它不会附加'#'

public static class HtmlHelperRouteLinkExtension { public static IHtmlString RouteLink( this HtmlHelper htmlHelper, string linkText, string routeName, string fragment) { var url = new UrlHelper(htmlHelper.ViewContext.RequestContext); return htmlHelper.Raw(string.Format("<a href=\"{0}{1}\">{2}</a>", url.RouteUrl(routeName), String.IsNullOrWhiteSpace(fragment) ? "" : "#" + fragment, linkText)); } }

于 2014-06-04T09:35:15.393 回答