Pracuję nad aplikacji ASP.NET MVC 3 internetowej, gdzie mogę używać TempData przechowywać obiekt modelu, w sytuacji, w której użytkownik nie jest zalogowanyTempData Nie przejaśniały
Oto przepływu.:
- Użyj formularza przesyłającego.
- Kod (specjalny filtr akcji) dodaje model do TempData, przekierowuje do strony logowania.
- użytkownika przekierowany z powrotem do GET działania, które czyta TempData i wzywa POST działanie bezpośrednio
Po kroku 3, bym TempData myślowe będą wyczyszczone?
Oto kod:
[HttpGet]
public ActionResult Foo()
{
var prefilled = TempData["xxxx"] as MyModel;
if (prefilled != null)
{
return Foo(prefilled);
}
}
[HttpPost]
[StatefulAuthorize] // handles the tempdata storage and redirect to logon page
public ActionResult Foo(MyModel model)
{
// saves to db.. etc
}
znalazłem this article który stanowi:
- przedmioty są usuwane tylko z TempData na końcu wniosku, jeżeli zostały one oznaczone do usunięcia.
- Przedmioty są tylko oznaczone do usunięcia po przeczytaniu.
- Przedmioty można odznaczać, wywołując TempData.Keep (klawisz).
- RedirectResult i RedirectToRouteResult zawsze wywołują funkcję TempData.Keep().
Cóż, czytając go z TempData["xxx"]
nie jest to "czytaj" i dlatego powinny być one oznaczone do usunięcia?
I ostatnia część mnie dotyczy - ponieważ robię przekierowanie po POST (P-R-G). Ale nie można tego uniknąć.
Czy istnieje sposób, aby powiedzieć "porzucić ten przedmiot". TempData.Remove? Czy robię to źle?
Musisz wykonać pełne przekierowanie i nie zwracać drugiej metody działania. Dlatego nie działa. – Buildstarted
@BuildStarted - ale metoda POST * nie * wykonuje przekierowanie po zakończeniu. Nie możesz wykonać przekierowania do metody POST, czy to nie będzie GET? – RPM1984
Cóż, z tego co czytam na podstawie ograniczonych danych wynika, że robisz get i przekierowanie * w kodzie * do posta - że 'StatefulAuthorize' nie będzie wywoływane. – Buildstarted