Как вернуть другое представление, но сохранить ViewModel в OnActionExecuting - PullRequest
1 голос
/ 16 февраля 2010

Я пытаюсь вернуть другое представление, если условие выполнено. Я хочу сохранить Модель, переданную в вид из действия.

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var subAction = filterContext.RequestContext.RouteData.Values["subaction"].ToString();
        var action = filterContext.RequestContext.RouteData.Values["action"].ToString();

        if (!string.IsNullOrEmpty(subAction))
        {
            var view = (ViewResultBase) (filterContext.Result);
            filterContext.Result = View(action + subAction, view.ViewData.Model);
        }

        base.OnActionExecuting(filterContext);
    }

При этом я получаю "Object reference not set to an instance of an object.". Очевидно, модель не была установлена?

Причина, по которой я делаю это таким образом, заключается в том, что я хочу сохранить наименование представления как можно более простым. И мой URL выглядит так: /Global/Modules/Admin/Users/Create. Это вернуло бы представление «UsersCreate». Который работает. Но модель либо пуста, либо равна нулю!

UPDATE

На самом деле. Это просто поразило меня. Поведение правильное. Потому что я только возвращаю вид. Действие никогда не выполняется. Пользовательское действие выполняется, но возвращает представление UsersCreate. Как я могу сделать что-то вроде RedirectToAction, без фактического перенаправления.

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

OnActionExecuting запускается перед действием, поэтому модель еще не существует. Вы можете попробовать с OnActionExecuted, который вызывается, когда действие возвращает ActionResult.

0 голосов
/ 30 июня 2014
public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
    ...
    if (needToRedirect)
    {
       ...
       filterContext.Result = new RedirectResult(url);
       return;
    }
    ...
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...