Получение модели из фильтра после RedirectToAction - PullRequest
0 голосов
/ 04 июля 2018

В настоящее время имеется фильтр действий, который в основном проверяет TempData, и, если в TempData есть элементы определенного типа, он добавляет их в модель. Это прекрасно работает при просмотре сайта с возвратом (модель) и т. Д. Однако в какой-то момент я хочу выполнить RedirectToAction, который не работает. Модель всегда NULL.

Фильтр ...

public class ToastFilter : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext context)
    {
        var _tempDataDictionaryFactory = context.HttpContext.RequestServices.GetService(typeof(ITempDataDictionaryFactory)) as ITempDataDictionaryFactory;

        var result = context.Result as ViewResult;
        var tempData = _tempDataDictionaryFactory.GetTempData(context.HttpContext);

        var model = result?.Model as MyApp.Common.Models.Misc.BaseModel;

        if (model == null)
            return;

        if (tempData.Keys.Count > 0)
            model.Toasts.AddRange(tempData.Where(td => td.Value is ToastModel).Select(td => td.Value as ToastModel));
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        //Do Nothing
    }
}

Контроллер ...

 [HttpPost]
    [ValidateAntiForgeryToken]
    [AuthorizeRoles(Settings.SystemAdministratorRole, "Company_Admin")]
    public async Task<IActionResult> Index(CompanyDetailsModel model)
    {
        var modelText = _stringLocalizerFactory.Create(typeof(CompanyDetailsModel));
        var commonText = _stringLocalizerFactory.Create(typeof(Common.System.Resource.CommonResources));

        if (!ValidationManager.IsValid(ModelState, model.DynamicProperties))
        {
            TempData.Add(Guid.NewGuid().ToString(), ValidationManager.CreateValidationMessage(ModelState, model));

            return View(model);
        }

        var companyExists = model.CompanyId.HasValue;
        var companyUpsertResult = await _company.UpsertCompany(model);

        switch (companyUpsertResult.Item1)
        {
            case GenericOutcome.Success:
                TempData.Add(Guid.NewGuid().ToString(),
                             companyExists
                                 ? ToastHelper.GenerateToast(modelText["UpdateSuccessMessage"],
                                                             commonText["Success"], Icons.ThumbsUp, 5000,
                                                             ToastSize.Small, Settings.GreenMessage)
                                 : ToastHelper.GenerateToast(modelText["CreateSuccessMessage"],
                                                             commonText["Success"], Icons.ThumbsUp, 5000,
                                                             ToastSize.Small, Settings.GreenMessage));
                return RedirectToAction("List");
            case GenericOutcome.Failure:
                TempData.Add(Guid.NewGuid().ToString(),
                             companyExists
                                 ? ToastHelper.GenerateToast(modelText["UpdateFailedMessage"],
                                                             commonText["Failure"], Icons.ThumbsDown,
                                                             5000, ToastSize.Small, Settings.RedMessage)
                                 : ToastHelper.GenerateToast(modelText["CreateFailedMessage"],
                                                             commonText["Failure"], Icons.ThumbsDown,
                                                             5000, ToastSize.Small, Settings.RedMessage));
                return View(model);
        }

        return View(model);
    }

    [Authorize(Roles = Settings.SystemAdministratorRole)]
    public IActionResult List()
    {
        var model = new CompanyListModel();

        return View(model);
    }

Здесь он не может распознать, что у него есть модель. Все это прекрасно работает, если общий результат является ошибкой, и он использует стандартный маршрут Return View (модель).

Есть идеи, как заставить фильтр работать, если он используется через 'RedirectToAction'?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...