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

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

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

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

[PassParametersDuringRedirect] открытый класс NewCapitalStructureController: BaseController {private readonly IShelfService shelfServiceServiceService1007 *

    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 ]

1 голос
/ 15 июня 2012
public ActionResult Shelf(NewCapitalStructureViewModel model)
{
    if (model == null)             
        model = new NewCapitalStructureViewModel(); 
    ControllerContext.Controller.TempData.Clear();      
    return View("Shelf", model);
} 

Это очистит все параметры в TempData.

0 голосов
/ 06 июня 2011

Чтобы обойти это, я создал новый атрибут (снова наследующий от ActionFilterAttribute) и украсил метод Shelf выше новым атрибутом:

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

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

...