MVC Contrib PassParametersDuringRedirect-停止在第一次重定向之后持续存在的值

本文关键字:之后 存在 重定向 第一次 PassParametersDuringRedirect- Contrib MVC | 更新日期: 2023-09-27 17:58:22

MVcControlib的新手,所以可能我使用错误,但我在使用PassParametersDuringRedirect属性时遇到问题。

我遇到的问题是,正如预期的那样,当我第一次重定向时,参数值被正确传递,问题是在这之后,值仍然保持不变,而如果我使用TempData(我不想这样做),那么这些值只在第一次调用时保持不变。

代码如下。当我填充模型时。ErrorMessage,然后重定向到Shelf,一切都如预期的那样进行,但是所有后续对Shelf的调用仍然填充了ErrorMessage。

[PassParametersDuringRedirect]公共类NewCapitalStructureController:BaseController{专用只读IShelfService shelfService;

    public NewCapitalStructureController(IRepository repository, IPrincipalProxy principal, IShelfService shelfService)
        : base(repository, principal)
    {
        this.shelfService = shelfService;
    }
    public ActionResult Shelf(NewCapitalStructureViewModel model)
    {
        if (model == null)
            model = new NewCapitalStructureViewModel();
        return View("Shelf", model);
    }
    public ActionResult SaveShelf(NewCapitalStructureViewModel newCapitalStructureViewModel)
    {
        var result = shelfService.CreateShelf(newCapitalStructureViewModel.ShelfName);
        var model = new NewCapitalStructureViewModel();
        model.ShelfID = result.ID;
        if (!result.Success)
            model.ErrorMessage = result.Message;
        return this.RedirectToAction(x=> x.Shelf(model));
    }

MVC Contrib PassParametersDuringRedirect-停止在第一次重定向之后持续存在的值

public ActionResult Shelf(NewCapitalStructureViewModel model)
{
    if (model == null)             
        model = new NewCapitalStructureViewModel(); 
    ControllerContext.Controller.TempData.Clear();      
    return View("Shelf", model);
} 

这将清除TempData中的所有参数。

为了解决这个问题,我创建了一个新属性(再次继承自ActionFilterAttribute),并用新属性装饰了上面的Shelf方法:

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
    base.OnResultExecuted(filterContext);
    filterContext.Controller.TempData.Clear();
}

我很想知道我是不是在哪里出错了。