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();
}
Хотелось бы знать, если я где-то здесь не так.