一部のリンクにフラグメント識別子を含めたい。このサイトのいくつかの URL のように:
デバッグ: IE6 + SSL + AJAX + 投稿フォーム = 404 エラー#5626
MVC の組み込みメソッドでこれを行う方法はありますか? それとも、独自の HTML ヘルパーを作成する必要がありますか?
一部のリンクにフラグメント識別子を含めたい。このサイトのいくつかの URL のように:
デバッグ: IE6 + SSL + AJAX + 投稿フォーム = 404 エラー#5626
MVC の組み込みメソッドでこれを行う方法はありますか? それとも、独自の HTML ヘルパーを作成する必要がありますか?
次のリリースでこれをサポートすることを検討しています。
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*/
);
}
@ドミニク、
それをルートに入れるとルーティングの問題が発生することはほぼ確実です。
@リッキー、
MVC がこれをサポートするまでは、ルートの作成方法についてもう少し「古い学校」にすることができます。たとえば、次のように変換できます。
<%= Html.ActionLink("Home", "Index") %>
の中へ:
<a href='<%= Url.Action("Index") %>#2345'>Home</a>
または、本質的に同じことを行う独自のヘルパーを作成することもできます。
簡単に言えば、いいえ。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 パス コンポーネントとして表示される、非常に単純な状況でのみ実行できます。
これはクライアント側のソリューションですが、jquery を利用できる場合は、次のようなことができます。
<script language="javascript" type="text/javascript">
$(function () {
$('div.imageHolder > a').each(function () {
$(this).attr('href', $(this).attr('href') + '#tab-works');
});
});
</script>