控制器等效于ASP.NET MVC中的HttpContext.Current

我想访问当前正在执行的Controller,以便我可以将相应的ActionResult的返回卸载到辅助方法上。为此,我正在寻找相当于我认为是ControllerContext.Current但却不是。谢谢! 编辑澄清:我有一个基于JavaScript的通用表单控件,但我想添加一个选项,以便它与noscript一起使用。目前,我的Controller将ViewData.Model设置为JSON-ified Models.FormResponse< T>。 这个FormReponse是根据帖子的状态和生成的任何错误消息设置的,所以我想要一个GetActionResult()方法来执行脚本/ noscript检查(一个隐藏的表单输入),并且: 将Model设置为JSONed FormResponse并返回View()或 将FormResponse序列化为Session并返回Redirect()。 因为这显然会改变返回值,我不想每次都自己检查,我需要从FormResponse的GetActionResult方法调用View或Redirect,以便将其称为:
return formResponse.GetActionResult();
我知道有一个更宇航的设计,这可以变得更加健壮,但由于noscript选项目前不是一个主要功能,我只需要一个快速解决方案工作,不会破坏其他东西。 更新#2 以下是在ActionResult类中实现的,为我完成了这项工作。谢谢CVertex!
public override void ExecuteResult(ControllerContext context)
    {
        if (CMSEnvironment.NoScript)
        {
            Oracle.Response.Redirect(Oracle.Request.UrlReferrer.ToString(), true);
        }

        context.Controller.ViewData.Model = _model.ToJSON();

        new ViewResult()
        {
            ViewName = Areas.Site.Helpers.SharedView.Service,
            ViewData = context.Controller.ViewData
        }.ExecuteResult(context);
    }
    
已邀请:
静态对可测试性不利,而且在MVC中非常不鼓励。 为什么要访问当前的控制器和操作方法? 执行此操作的最佳方法是实现自己的ActionFilter。 这为您提供了在执行操作方法之前或之后拦截请求的方法。 编辑: 通过截取过滤器的OnActionExecuted内部的结果,您可以执行noscript /脚本检查并相应地修改ViewData以供View使用。 在OnActionExecuted内部,您也可以进行noscript检查,并可以完全控制最终的ActionResult或ViewData。 或者,您可以编写自己的ActionResult来做出所有这些决定。 所以,你的控制器动作最终会有效
return new MyActionResult(format_and_view_agnostic_model_object);
    
似乎没有办法从线程导航到当前的Controller。那就是你可以获得ControllerBuilder并且你可以获得MvcHttpHandler但是它们都不允许你访问处理程序正在使用的控制器实例。     

要回复问题请先登录注册