从ActionResult中提取控制器和操作名称

时间:2015-05-21 11:26:48

标签: asp.net asp.net-mvc razor

在我的视图(或部分视图)中,我想使用具有此签名的帮助程序:

// using T4MVC to get the ActionResult from "MVC.FooController.BarAction()"
@Html.doStuff(MVC.FooController.BarAction(), someData)

而不是

@Html.doStuff(controllerName, actionName, someData)

我想简化我的扩展方法,即一个参数而不是两个。

在扩展方法中,如何从ActionResult的实例中提取控制器和操作名称?

请注意HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString();没有帮助。我需要传递一个任意的ActionResult。所以这不是一个重复的问题

1 个答案:

答案 0 :(得分:2)

View下面使用代码 -

@ViewContext.RouteData.Values["Controller"]
@ViewContext.RouteData.Values["Action"]

Controller -

Request.RequestContext.RouteData.Values["controller"].ToString()
Request.RequestContext.RouteData.Values["action"].ToString()

在C#Helper类中 -

HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString();

如果您想从ActionResult检索Action和控制器名称,那么一个选项是 -

// In Action
 ViewBag.Controller = Request.RequestContext.RouteData.Values["controller"].ToString();
 ViewBag.Action = Request.RequestContext.RouteData.Values["action"].ToString();

然后以下列方式从ActionResult检索值 -

var controllerName = actionResultVariable.ViewBag.Controller;
var actionName = actionResultVariable.ViewBag.Action;

编辑:选项2:

创建自定义ActionResult -

public class MyActionResult : ViewResult
    {
        public MyActionResult(object model)
        {
            this.ViewData.Model = model;
        }
        public string ControllerName
        {
            get
            {
                return HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
            }
        }

        public override void ExecuteResult(ControllerContext context)
        {
           base.ExecuteResult(context);
        }
    }

然后在你的Controller Action中 -

return new MyActionResult(model);

然后,当您将ActionResult传递给Extension方法时,可以使用 -

MyActionResultVariable.ControllerName