Sto lavorando su un'applicazione ASP.NET MVC 3 web, dove io uso TempData per memorizzare un oggetto del modello, nello scenario in cui l'utente non è connesso aTempData non essere sgomberati
Ecco il flusso.:
- Usa modulo di invio.
- Il codice (filtro azioni speciali) aggiunge il modello a TempData, reindirizza alla pagina di accesso.
- utente reindirizzato indietro per ottenere l'azione, in cui si legge TempData e chiama POST l'azione direttamente
Dopo il punto 3, avrei TempData pensato che sarebbe stato eliminato?
Ecco il codice:
[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
}
ho trovato this article che afferma:
- Gli articoli sono rimossi solo dalla TempData al termine di una richiesta se essi sono stati contrassegnati per la rimozione.
- Gli articoli vengono contrassegnati per la rimozione solo quando vengono letti.
- Gli articoli possono essere deselezionati chiamando TempData.Keep (chiave).
- RedirectResult e RedirectToRouteResult chiama sempre TempData.Keep().
Beh, leggendolo con TempData["xxx"]
non è una "lettura" e quindi dovrebbero essere taggati per la rimozione?
E l'ultimo mi riguarda un po '- dal momento che sto facendo un reindirizzamento dopo il POST (P-R-G). Ma questo non può essere evitato.
C'è un modo per dire "metti da parte questo oggetto". TempData.Remove? O sto sbagliando?
È necessario eseguire un reindirizzamento completo e non restituire un secondo metodo di azione. Ecco perché non funziona. – Buildstarted
@BuildStarted - ma il metodo POST * fa * un reindirizzamento una volta terminato. Non puoi eseguire un reindirizzamento a un metodo POST, non sarà un GET? – RPM1984
Bene, da quello che sto leggendo in base ai dati limitati è che stai facendo un get e un reindirizzamento * in codice * a un post - che 'StatefulAuthorize' non verrà chiamato. – Buildstarted