22

一部のリンクにフラグメント識別子を含めたい。このサイトのいくつかの URL のように:

デバッグ: IE6 + SSL + AJAX + 投稿フォーム = 404 エラー#5626

MVC の組み込みメソッドでこれを行う方法はありますか? それとも、独自の HTML ヘルパーを作成する必要がありますか?

4

7 に答える 7

6

次のリリースでこれをサポートすることを検討しています。

于 2008-08-27T16:18:45.187 に答える
4

MVC3 (およびおそらくそれ以前は確認していません) では、UrlHelper.GenerateUrl をフラグメント パラメータで渡すことができます。これは、機能をラップするために使用するヘルパーメソッドですL

public static string Action(this UrlHelper url, string actionName, string controllerName, string fragment, object routeValues)
{
    return UrlHelper.GenerateUrl(
        routeName: null,
        actionName: actionName,
        controllerName: controllerName,
        routeValues: new System.Web.Routing.RouteValueDictionary(routeValues),
        fragment: fragment,
        protocol: null,
        hostName: null,
        routeCollection: url.RouteCollection,
        requestContext: url.RequestContext,
        includeImplicitMvcValues: true /*helps fill in the nulls above*/
    );
}
于 2011-08-25T16:26:25.707 に答える
3

@ドミニク、

それをルートに入れるとルーティングの問題が発生することはほぼ確実です。

@リッキー、

MVC がこれをサポートするまでは、ルートの作成方法についてもう少し「古い学校」にすることができます。たとえば、次のように変換できます。

<%= Html.ActionLink("Home", "Index") %>

の中へ:

<a href='<%= Url.Action("Index") %>#2345'>Home</a>

または、本質的に同じことを行う独自のヘルパーを作成することもできます。

于 2008-08-27T16:47:21.717 に答える
1

簡単に言えば、いいえ。ASP.NET MVC Preview 3 には、アクション リンクにアンカーを含める優れた方法はありません。Rails の url_for :anchor とは異なり、UrlHelper.GenerateUrl (およびそれを使用する ActionLink、RedirectToAction など) には、アンカーをエンコードできる魔法のプロパティ名がありません。

あなたが指摘するように、あなたはそうするあなた自身を転がすことができます。これはおそらく最もクリーンなソリューションです。

ハックして、ルートにアンカーを含めて、パラメーター ハッシュで値を指定するだけで済みます。

routes.MapRoute("WithTarget", "{controller}/{action}/{id}#{target}");
...
<%= Html.ActionLink("Home", "Index", new { target = "foo" })%>

これにより、/Home/Index/#foo のような URL が生成されます。残念ながら、これは URL の末尾に表示される URL パラメータではうまく機能しません。したがって、このハックは、すべてのパラメーターが URL パス コンポーネントとして表示される、非常に単純な状況でのみ実行できます。

于 2008-08-10T10:22:59.670 に答える
0

これはクライアント側のソリューションですが、jquery を利用できる場合は、次のようなことができます。

<script language="javascript" type="text/javascript">
    $(function () {
        $('div.imageHolder > a').each(function () {
            $(this).attr('href', $(this).attr('href') + '#tab-works');
        });
    });
</script>
于 2011-07-20T21:48:56.060 に答える