2020/11/09
今回は技術系で「ASP.NET MVC」に関するちょっとしたお話です。
現在リクエストされているコントローラ名とアクション名を取得したいことがあります。特に外部プログラムに処理を投げるときに、現在どの画面か判断できる材料があると便利です。
さっさと結論を書きますが、
・現在の名前を取得する場合はControllerContext.RouteData.Values
・子アクションで親アクションの名前を取得する場合はControllerContext.ParentActionViewContextのRouteData
から取得できます!
環境
・ASP.NET MVC
5.2.4
取得方法
現在のコントローラ/アクション名はControllerContext.RouteData.Valuesから取得できます。
ControllerContextはSystem.Web.Mvc.Controllerを継承している場合、コントローラメソッド内からアクセスできます。
string controllerName = (string)ControllerContext.RouteData.Values["controller"]; string actionName = (string)ControllerContext.RequestContext.RouteData.Values["action"];
子アクション内から親のコントローラ/アクション名を取得したい場合はControllerContext.ParentActionViewContext.RouteData.Valuesを参照します。
string parentControllerName = (string)ControllerContext.ParentActionViewContext.RouteData.Values["controller"]; string parentActionName = (string)ControllerContext.ParentActionViewContext.RouteData.Values["action"];
ちなみに子アクション自体のコントローラ/アクション名を取得したい場合、前述の「現在のコントローラ/アクション名」の方法で取得できます。
サンプルソース
親アクションと子アクションで現在のコントローラ/アクション名を表示してみます。
【コントローラ】
using System.Web.Mvc;
namespace AzarashiSample01.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.controllerName = (string)ControllerContext.RouteData.Values["controller"];
ViewBag.actionName = (string)ControllerContext.RequestContext.RouteData.Values["action"];
return View();
}
[ChildActionOnly]
public ActionResult NameTest()
{
ViewBag.childControllerName = (string)ControllerContext.RouteData.Values["controller"];
ViewBag.childActionName = (string)ControllerContext.RouteData.Values["action"];
ViewBag.parentControllerName = (string)ControllerContext.ParentActionViewContext.RouteData.Values["controller"];
ViewBag.parentActionName = (string)ControllerContext.ParentActionViewContext.RouteData.Values["action"];
return PartialView("ChildTest");
}
}
}
【親アクションのビュー】
@{
ViewBag.Title = "テストページ";
}
<div class="row">
<div class="col-md-4">
<h2>親テスト</h2>
<p>アクション名: @ViewBag.controllerName</p>
<p>コントローラ名: @ViewBag.actionName</p>
@Html.Action("NameTest")
</div>
</div>
【子アクションのビュー】
<h2>子アクションテスト</h2> <p>アクション名: @ViewBag.childControllerName</p> <p>コントローラ名: @ViewBag.childActionName</p> <p>親アクション名:@ViewBag.parentControllerName</p> <p>親コントローラ名: @ViewBag.parentActionName</p>
コントローラ名やアクション名を取得したい場合は参考にしてみてください。






