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 に答える