2010-02-18 55 views
1

我试图在视图中使用Html.RouteLink来生成指向另一个页面上的命名锚点的链接。 RouteLink有几个定义,包括片段选项,但我试图找出是否有其他方法。使用ASP.Net MVC生成包含片段的链接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应该能够处理更优雅。

+0

不得不定义协议和主机名只是因为我可以追加一个片段似乎很愚蠢。我希望有更好的办法。 – Tivac 2010-02-19 22:07:21

回答

2

被修改,以考虑主支柱的编辑

Html.RouteLink( “Looga”
新{控制器= “Cooga”,动作= “Aooga”}, 新{片段= “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") 
+0

这可能是我最终要做的。很抱歉,这个拙劣的例子,我没有引起足够的重视。现在修复。 – Tivac 2010-02-19 00:25:40

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)); } }