我想访问当前正在执行的控制器,这样我就可以将适当的 ActionResult 的返回卸载到辅助方法上。为此,我正在寻找与我认为是 ControllerContext.Current 的等价物,但不是。谢谢!
编辑澄清:我有一个基于 JavaScript 的通用表单控件,但我想添加一个选项,以便它与 noscript 一起使用。目前,我的控制器将 ViewData.Model 设置为 JSON 化的 Models.FormResponse<T>。
这个 FormReponse 设置了帖子的状态和生成的任何错误消息,所以我想要一个 GetActionResult() 方法来执行脚本/noscript 检查(隐藏的表单输入),或者:
- 将模型设置为 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);
}