在我的视图(或部分视图)中,我想使用具有此签名的帮助程序:
// 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
。所以这不是一个重复的问题
答案 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