Я хотел бы получить доступ к текущему исполняемому Контроллеру, чтобы я мог переложить возврат соответствующего ActionResult на вспомогательный метод. С этой целью я ищу эквивалент того, что, как я думал, было бы ControllerContext.Current, но это не так. Спасибо!
Изменить для уточнения: У меня есть общий элемент управления формой, основанный на JavaScript, но я бы хотел добавить опцию, чтобы он работал с noscript. На данный момент мой контроллер устанавливает ViewData.Model в JSON-ifled Models.FormResponse .
Этот FormReponse настроен на статус сообщения и все сообщения об ошибках, которые были сгенерированы, поэтому я бы хотел метод GetActionResult (), который проверяет скрипт / noscript (ввод скрытой формы) и либо: *
- Устанавливает модель в JSONed FormResponse и возвращает View (), или
- Сериализует FormResponse для сеанса и возвращает Redirect ().
Поскольку это, очевидно, меняет возвращаемое значение, и я не хочу выполнять проверку каждый раз самостоятельно, мне нужно вызвать View или Redirect из метода GetActionResult FormResponse, чтобы вызвать это как:
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);
}