7 messaggi dal 14 luglio 2016
Salve ragazzi, sono nuovo della programmazione in Asp.net e C#.
Avrei una domanda da sottoporvi:
Ho la necessità di passare dati tra metodi di uno stesso controller. Mi spiego. Ho una view con una form nel quale l' utente immette dei valori. Io ho necessità che questi valori vengano memorizzati nel controller in modo tale da poterli usare quando ho necessità e da qualunque metodo del controller. Ho provato ad usare delle variabili di classe del controller, cioè quando un metodo di controller recupera i dati di questa form, li memorizzo in una variabili di classe ma non si setta, qualsiasi cosa faccia è sempre vuota... Eì come se lo scope di ogni variabili sia sempre e solo il metodo del controller... non capisco dove sbaglio

public class SpedisciController : Controller
{
private SpedizioneContext db = new SpedizioneContext();
private Pacco NuovoPacco = new Pacco();
....
public ActionResult NuovaSpedizione([Bind(Exclude =
"ID,SpedizioneID")]Pacco Paccoo)
{
NuovoPacco = Paccoo;
}
...
}


Ecco una parte del mio codice. Qualsiasi cosa io faccia o scriva nel metodo NuovaSpedizione, NuovoPacco non memorizza i valori ...


Grazie in anticipo per la risposta
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao e benvenuto nel forum!


li memorizzo in una variabili di classe ma non si setta

Il settaggio avviene correttamente ma tu probabilmente ti aspetti che quell'oggetto continui ad essere disponibile durante tutta la navigazione dell'utente. Era questa la tua aspettativa?

Devi sapere che ogni volta che l'utente richiede una pagina o invia un form, il Controller viene creato e poi immediatamente distrutto al termine della richiesta, con tutto ciò che conteneva. Il riferimento al tuo oggetto, perciò, va perso e la tua variabile alla successiva richiesta risulterà vuota.

Spiega cosa devi realizzare e perché hai bisogno che un oggetto "sopravviva" alle varie richieste di pagina. La soluzione più appropriata dipende dalla situazione in cui ti trovi.

ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 14 luglio 2016
Io ho una serie di diverse form su view differenti. La mia necessità è prendere i valori di queste form, combinarli tra loro, ma solo alla fine, quando tutte sono state riempite dall' utente e poi da ciò che ricavo fare un scrittura nel LocalDB. Volevo usare le variabili nel controller per memorizzare queste info per poi usarle in un secondo momento. Penso che con TempData io possa risolvere in parte la situazione ma se c'è un altro modo sarebbe preferibile.
Modificato da jehunty il 28 luglio 2016 14.41 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
TempData non è proprio adatto in questo caso perché gli oggetti che inserisci in questa collezione sopravvivono alla successiva richiesta e vanno poi persi.
Tipicamente lo usi per dare un'input all'action verso la quale reindirizzi. Ad esempio lo puoi usare per mostrare un messaggio "Dati salvati correttamente" nella pagina di elenco, subito dopo la ridirezione da un'action che ha ricevuto i dati del form.

Nel tuo caso potrebbe essere più utile la Session. La sintassi è la stessa di TempData, solo che la collezione si chiama Session anziché TempData.
I dati che vi inserisci all'interno sopravvivranno per tutta la durata della sessione dell'utente, che di solito dura finché non chiude il browser o finché non passano 20 minuti dall'ultima sua richiesta di pagina.

A me personalmente non è che piaccia molto ricorrere alla Session ma a prescindere dalla mia opinione non è sbagliato usarla.
Preferisco questi altri approcci:
  • Se l'intera compilazione richiede giusto un paio di minuti, tengo lo stato lato client, in un oggetto javascript. Di volta in volta mostro all'utente schermate differenti caricandole con una richiesta ajax grazie a jQuery.
  • Se la compilazione richiede più tempo, allora preferisco salvare la compilazione parziale nel database, in una tabella apposita. Faccio così perché data la durata dell'operazione, non posso sapere se l'utente nel frattempo verrà distratto da una telefonata di 20 minuti o chissà da quale altra interruzione (es. il browser che crasha). Salvando nel database posso farlo continuare a compilare dal punto in cui aveva interrotto. Nel frattempo potrebbe anche essersi collegato da un altro PC.


ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 14 luglio 2016
Proverò anche io con Jquery, Grazie!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.