MVC Contrib PassParametersDuringRedirect - остановить значения, сохраняющиеся после первого перенаправления

Новичок в MVcContrib, поэтому, возможно, я использую его неправильно, но у меня возникла проблема с использованием атрибута PassParametersDuringRedirect.

У меня проблема в том, что, как и ожидалось, значения параметров передаются правильно при первом перенаправлении, проблема в том, что после этого значения все еще сохраняются, тогда как если я использую TempData (что я не хочу делать), то значения сохраняются только для первого вызова.

Код ниже. Когда я заполняю model.ErrorMessage, а затем перенаправляю на Shelf, все работает как положено, однако все последующие вызовы Shelf по-прежнему заполнены ErrorMessage.

[PassParametersDuringRedirect] открытый класс NewCapitalStructureController: BaseController { private readonly 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));
    }

2 ответа

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();
}

Хотелось бы знать, если я где-то здесь не так.

Другие вопросы по тегам