Nel mio primo progettino con ASP.NET MVC mi si è presentata l’esigenza di dover presentare la stessa view in due modalità diverse (diverso titolo, una con link di modifica e l’altra no, ecc.).
Ingenuamente, siccome la prima modalità (link tipo Controller/List) esisteva già, ho pensato di usare una Action di questo tipo:
public ActionResult ViewList()
{
TempData["mode"] = "readonly";
return RedirectToAction("List");
}
delegando così tutto il lavoro di preparazione dei dati alla Action già in opera; nella pagina ho poi usato un paio di if (e si, mi capita ancora di usarli ;-)) per generare o meno i link per l’editing e per impostare il titolo.
Problema (di cui non mi sono accorto subito perché l’applicazione gira in un normale frame html che rende l’indirizzo visualizzato nella barra di IE sempre identico!): una volta eseguito RedirectToAction è come se avessi digitato quell’indirizzo (Controller/List nel mio caso) per cui se l’utente preme il pulsante Aggiorna del browser finisce nella prima modalità!
Soluzione “veloce”: ho spostato il codice presente nella prima action (Controller/List) in una funzione che richiamo da entrambe le action; la action ViewList è diventata:
public ActionResult ViewList()
{
TempData["mode"] = "readonly";
OnList_AddDataToViewData();
return View("List");
}