Как вернуть другое представление, но сохранить ViewModel в OnActionExecuting

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

    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». Который работает. Но Модель либо пуста, либо равна нулю!

ОБНОВЛЕНИЕ

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


person Kordonme    schedule 16.02.2010    source источник


Ответы (1)


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

person Darin Dimitrov    schedule 16.02.2010
comment
Но тогда уже поздно менять Вид. Я получаю The model item passed into the dictionary is of type[..]. Передаваемые данные представляют собой список пользователей. Я передаю класс модели представления UsersCreate. Список пользователей является Моделью представления Users. - person Kordonme; 16.02.2010
comment
Фактически. Это просто поразило меня. Поведение правильное. Потому что я только возвращаю View. Действие никогда не выполняется. Действие Users выполняется, но возвращает представление UsersCreate. Как я могу сделать что-то вроде RedirectToAction без перенаправления. - person Kordonme; 16.02.2010