우리의 웹 응용 프로그램의 경우 뷰에 따라 가져 오기 및 표시 된 항목의 순서를 저장해야합니다. 또는 뷰를 생성 한 컨트롤러 및 작업 (및 사용자 ID는 물론 여기서 중요한 것은 아닙니다).
각 컨트롤러 작업에서 식별자를 직접 제공하는 대신 (보기에 따라 DB 출력의 일부 정렬에 사용하기 위해) 컨트롤러와 가져 오는 작업 방법 에서이 식별자를 자동으로 만드는 것이 더 안전하고 쉽다고 생각했습니다. 에서 전화했다.
컨트롤러의 액션 메소드 내에서 컨트롤러 이름과 액션을 어떻게 얻을 수 있습니까? 아니면 그것에 대해 반성이 필요합니까? 미리 감사드립니다.
답변
string actionName = this.ControllerContext.RouteData.Values["action"].ToString();
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();
답변
해당 정보를 얻는 확장 방법은 다음과 같습니다 (ID도 포함).
public static class HtmlRequestHelper
{
public static string Id(this HtmlHelper htmlHelper)
{
var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;
if (routeValues.ContainsKey("id"))
return (string)routeValues["id"];
else if (HttpContext.Current.Request.QueryString.AllKeys.Contains("id"))
return HttpContext.Current.Request.QueryString["id"];
return string.Empty;
}
public static string Controller(this HtmlHelper htmlHelper)
{
var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;
if (routeValues.ContainsKey("controller"))
return (string)routeValues["controller"];
return string.Empty;
}
public static string Action(this HtmlHelper htmlHelper)
{
var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;
if (routeValues.ContainsKey("action"))
return (string)routeValues["action"];
return string.Empty;
}
}
용법:
@Html.Controller();
@Html.Action();
@Html.Id();
답변
유용 할 수 있습니다. 컨트롤러 생성자 에서 작업이 필요했으며 MVC 수명주기 의이 시점에서 나타나고 this
초기화되지 않았습니다 ControllerContext = null
. MVC 수명주기를 조사하고 재정의 할 적절한 함수 이름을 찾는 대신 방금의 작업을 찾았습니다 RequestContext.RouteData
.
그러나 HttpContext
생성자의 관련 용도와 마찬가지로 this.HttpContext
초기화 하려면 전체 네임 스페이스를 지정해야합니다 . 운 좋게도 System.Web.HttpContext.Current
정적입니다.
// controller constructor
public MyController() {
// grab action from RequestContext
string action = System.Web.HttpContext.Current.Request.RequestContext.RouteData.GetRequiredString("action");
// grab session (another example of using System.Web.HttpContext static reference)
string sessionTest = System.Web.HttpContext.Current.Session["test"] as string
}
참고 : HttpContext의 모든 속성에 액세스하는 가장 지원되는 방법은 아니지만 RequestContext 및 Session의 경우 내 응용 프로그램에서 제대로 작동하는 것으로 보입니다.
답변
var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;
if (routeValues != null)
{
if (routeValues.ContainsKey("action"))
{
var actionName = routeValues["action"].ToString();
}
if (routeValues.ContainsKey("controller"))
{
var controllerName = routeValues["controller"].ToString();
}
}
답변
@this.ViewContext.RouteData.Values["controller"].ToString();
답변
이것이 내가 지금까지 가진 것입니다.
var actionName = filterContext.ActionDescriptor.ActionName;
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
답변
이름을 얻는 가장 간단하고 실용적인 답변은 다음과 같습니다.
var actionName = RouteData.Values["action"];
var controllerName = RouteData.Values["controller"];
또는
string actionName = RouteData.Values["action"].ToString();
string controllerName = RouteData.Values["controller"].ToString();
위의 테스트는 asp.net mvc 5.