C# 重定向到操作后从筛选器获取模型

C# 重定向到操作后从筛选器获取模型,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,目前有一个动作过滤器,它基本上检查TempData,如果TempData中有某种类型的项,它会将其添加到模型中。当浏览所有“返回视图(模型)”等的站点时,这非常有效。然而,在某一点上,我想执行一个“重定向到操作”,但它不起作用。模型总是空的 过滤器 public class ToastFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext context) { var

目前有一个动作过滤器,它基本上检查TempData,如果TempData中有某种类型的项,它会将其添加到模型中。当浏览所有“返回视图(模型)”等的站点时,这非常有效。然而,在某一点上,我想执行一个“重定向到操作”,但它不起作用。模型总是空的

过滤器

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);
    }
[HttpPost]
[ValidateAntiForgeryToken]
[授权角色(Settings.SystemAdministratorRole,“公司管理”)]
公共异步任务索引(CompanyDetailsModel模型)
{
var modelText=_stringLocalizerFactory.Create(typeof(CompanyDetailsModel));
var commonText=_stringLocalizerFactory.Create(typeof(Common.System.Resource.CommonResources));
如果(!ValidationManager.IsValid(ModelState、model.DynamicProperties))
{
添加(Guid.NewGuid().ToString(),ValidationManager.CreateValidationMessage(ModelState,model));
返回视图(模型);
}
var companyExists=model.CompanyId.HasValue;
var companyUpsertResult=await_company.UpsertCompany(模型);
开关(companyUpsertResult.Item1)
{
案例一般结果。成功:
TempData.Add(Guid.NewGuid().ToString(),
公司存在者
?到lper.GenerateToast(modelText[“UpdateSuccessMessage”],
commonText[“Success”],Icons.ThumbsUp,5000,
ToastSize.Small,Settings.GreenMessage)
:ToastHelper.GenerateToast(modelText[“CreateSuccesessage”],
commonText[“Success”],Icons.ThumbsUp,5000,
ToastSize.Small,Settings.GreenMessage);
返回重定向到操作(“列表”);
案例GenericOutcome。失败:
TempData.Add(Guid.NewGuid().ToString(),
公司存在者
?到alper.GenerateToast(modelText[“UpdateFailedMessage”],
commonText[“失败”],Icons.ThumbsDown,
5000,最大尺寸。小,设置。红色消息)
:ToastHelper.GenerateToast(modelText[“CreateFailedMessage”],
commonText[“失败”],Icons.ThumbsDown,
5000,ToastSize.Small,Settings.RedMessage);
返回视图(模型);
}
返回视图(模型);
}
[授权(角色=设置.SystemAdministratorRole)]
公共IActionResult列表()
{
var模型=新的CompanyListModel();
返回视图(模型);
}
这就是它未能认识到自己有一个模式的地方。如果通用结果是失败的,并且它使用标准返回视图(模型)路由,那么这一切都可以完美地工作

如果通过“RedirectToAction”使用过滤器,你知道如何让它工作吗


谢谢

您确定
CompanyListModel
继承了
MyApp.Common.Models.Misc.BaseModel
?是的
public class CompanyListModel:BaseModel{}
当模型为空时,过滤器中的
context.ActionDescriptor.DisplayName
是什么?