2010-02-18 69 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)); } }

相關問題