先の投稿について、
「ASP.NET MVC でリダイレクト先アクションのURLにアンカーを指定したい」
http://devadjust.exblog.jp/8625935/
いくつか、よりスマートな別の解についてコメントで示唆頂いたので、実際に試してみた。
下記ドキュメントを参照。
http://msdn.microsoft.com/ja-jp/library/cc668176.aspx
ふむふむ、RouteValueDictionary でルーティング情報のプレースホルダ名とその値を指定することで、最適な仮想パスを入手できるということらしい。
今回はアクション名だけがカギになるので、下記のようなコードを書いてみた。
var para = new RouteValueDictionary { { "action", "ListDataByGrid" } };
var vpd = RouteTable.Routes.GetVirtualPath(null, para);
var url = vpd.VirtualPath;
すると、ちゃんと目的の URL を手に入れることができた。
ここで、RouteValueDictionary で "action" というキー名でアクション名を渡しているのは、Global.asax.cs 中で、下記のとおりのルート指定が行われているから。
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
...
"controller" とか "id" とかも指定できるのだろうけれども、省略もできるということなのだろう。
RedirectToAction メソッドも同様の実装なのだろうか(要ソース確認)。
あとは、アンカーを URL 末尾に連結して Redirect すればOK。
return this.Redirect(url + "#" + id.ToString());
コード中のあちこちで使用する場合は、RedirectToActionWithAnchor などと Controller クラスの拡張メソッドとして自作ライブラリ化しておくのもよいかもしれない。
コメント頂きました皆様、ありがとうございました。
(UrlHelperを使った方法についても後日追試予定。)