2009-03-21 9 views
9

Ho la seguente situazione ... In una determinata vista, l'utente deve selezionare l'ora iniziale, l'ora finale e il giorno della settimana. Ma, non posso salvare queste informazioni in DB perché ho bisogno di salvare la mia intera pagina e ho bisogno della chiave primaria della tabella primaria, ma non è questo il punto.ASP.NET MVC: esiste un modo per simulare un ViewState?

Quindi, sebbene non salvi questi dati in DB, sto salvando in una sessione. Mi è stato detto di salvare su un cookie, ma sembra che i cookie abbiano un limite di dimensioni. Quindi, sto salvando in una sessione.

Buuuut, mi è stato anche detto che avrei potuto salvare queste informazioni (ore e nei giorni feriali) alla pagina utente, simulando un ASP.NET ViewState ...

Qualcuno sa come fare questo ?? Qualcuno sa come salvare temporaneamente questi dati senza usare cookies o Session ??

Grazie !!

+0

Perché la restrizione per non utilizzare la sessione? Uso la sessione per memorizzare l'output dei "passaggi" di un wizard multi-step. – tvanfosson

risposta

20

I campi di immissione nascosti non sono utili?

<%= Html.Hidden(...) %> 

Update (serializzazione di un oggetto a Base64):

var formatter = new BinaryFormatter(); 
var stream = new MemoryStream(); 
formatter.Serialize(stream, myObject); // myObject should be serializable. 
string result = Convert.ToBase64String(stream.ToArray()); 

Quando si desidera recuperare indietro:

var formatter = new BinaryFormatter(); 
var stream = new MemoryStream(Convert.FromBase64String(hiddenFieldValue)); 
var myObject = (MyObjectType)formatter.Deserialize(stream); 

Assicurati di convalidare i dati memorizzati nel campo quando si usarlo come il client potrebbe cambiarlo. ViewState si occupa automaticamente di questo.

Nota a margine: ASP.NET utilizza LosFormatter invece di BinaryFormatter per serializzare ViewState come è serializzazione più efficiente o ASCII base. Potresti volerlo considerare anche tu.

+0

Sto usando campi nascosti per alcune cose ... ma come posso salvare un elenco di oggetti in un campo nascosto ?? – AndreMiranda

+0

Binario serializza l'oggetto e converte il byte [] nella stringa base64. –

+0

Come posso fare questo? – AndreMiranda

0

È possibile salvare un array javascript sul client ... e quindi trasmettere tutte le informazioni quando l'utente alla fine lo salva.

Devi lavorare un po 'di più, ma alla fine vale la pena.

Uso intensamente jQuery per fare cose del genere, è più facile di quanto sembri.

+0

Juan, sto anche usando jQuery nel progetto. Il problema è che questi dati vengono salvati in una sessione e sto usando jQuery Flexigrid per mostrarli. My Session sta dando da mangiare a Flexigrid ... – AndreMiranda

0

Se si desidera salvare i dati per quella richiesta e la richiesta successiva si consiglia di utilizzare Tempdata, altrimenti si consiglia di utilizzare la risposta di Mehrdad.

3

TempData ["MyData"], intendiamo che questo durerà solo un round trip.