現在実行中のコントローラーにアクセスして、適切な ActionResult の戻りをヘルパー メソッドにオフロードできるようにしたいと考えています。この目的のために、私は ControllerContext.Current であると思っていたものと同等のものを探していますが、そうではありません。ありがとう!
明確にするために編集: JavaScript ベースの一般的なフォーム コントロールがありますが、noscript で動作するようにオプションを追加したいと思います。現時点で、コントローラーは ViewData.Model を JSON 化された Models.FormResponse<T> に設定します。
この FormReponse は、投稿のステータスと生成されたエラー メッセージで設定されているため、スクリプト/ノースクリプト チェック (非表示のフォーム入力) を実行する GetActionResult() メソッドと、次のいずれかが必要です。
- Model を JSONed FormResponse に設定し、View() を返す、または
- FormResponse をセッションにシリアル化し、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);
}