Domanda

Ecco la situazione: ho un set di testo di un'etichetta, immediatamente seguito da una chiamata response.redirect () come segue (questo è solo un esempio, ma credo che descriva accuratamente la mia situazione):

aspx:

<asp:Label runat="server" Text="default text" />

Code-behind (codice chiamato per un evento onclick):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

Quando la pagina viene visualizzata, l'etichetta dice "testo predefinito". Cosa devo fare diversamente? La mia comprensione era che tali cambiamenti sarebbero stati fatti automaticamente dietro le quinte, ma apparentemente, non in questo caso. Grazie.

Per un po 'di sfondo in più, lo snippet code-behind viene chiamato all'interno di un metodo invocato su un evento onclick. C'è di più, ma ho incluso solo ciò che interessa a questo problema.

È stato utile?

Soluzione

Dopo un reindirizzamento, perderai tutte le informazioni sullo stato associate ai tuoi controlli. Se desideri semplicemente aggiornare la pagina, rimuovi il reindirizzamento. Al termine dell'esecuzione del codice, la pagina verrà aggiornata e qualsiasi stato verrà mantenuto.

Dietro le quinte, questo funziona perché ASP.NET scrive le informazioni sullo stato in un campo di input nascosto nella pagina. Quando si fa clic su un pulsante, il modulo viene pubblicato e ASP.NET decifra il viewstate. Il codice viene eseguito, modificando lo stato e, successivamente, lo stato viene nuovamente scritto nel campo nascosto e il ciclo continua, fino a quando non si cambia pagina senza un POST . Ciò può accadere quando si fa clic su un collegamento ipertestuale in un'altra pagina o tramite Response.Redirect (), che indica al browser di seguire l'URL specificato.

Altri suggerimenti

Una chiamata Response.Redirect chiederà al browser dell'utente di caricare la pagina specificata nell'URL fornito. Poiché si tratta di una nuova richiesta per la tua pagina, la pagina utilizza il testo contenuto nel markup (poiché presumo che il testo dell'etichetta sia impostato all'interno di un gestore di pulsanti o simile).

Se rimuovi la Response.Redirect la tua pagina dovrebbe funzionare come pubblicizzata.

ASP e ASP.Net sono intrinsecamente apolidi a meno che lo stato non sia esplicitamente specificato. Normalmente tra PostBack informazioni come il valore di un'etichetta sono contenute nel viewstate, ma se si cambiano le pagine quel viewstate va perso perché è stato archiviato in un campo nascosto nella pagina.

Se si desidera mantenere il valore dell'etichetta tra le chiamate è necessario utilizzare uno dei meccanismi di stato (ad es. Sessione, Preferenze) o sistemi di comunicazione (Richiesta (GET, POST)).

Inoltre potresti cercare Server.Transfer che cambierà chi sta elaborando la pagina dietro le quinte. Response.Redirect è progettato per abbandonare il contesto attuale nella maggior parte dei casi.

Per mantenere lo stato, utilizzare Server.Transfer invece di Response.Redirect.

Quindi, se potessi rispondere alla mia domanda (secondo le FAQ, questo è incoraggiato), la risposta breve è che non persisti lo stato di visualizzazione attraverso i reindirizzamenti. Lo stato di visualizzazione è per i postback, non per i reindirizzamenti.

Bonus: Tutto ciò che avresti sempre voluto sapere su Visualizza stato in ASP .NET , con immagini!

Per quello che vale (e si spera valga qualcosa), il capitolo 6 di Pro ASP .NET 3.5 in C # 2008, Seconda Edizione è una risorsa formidabile sull'argomento. Finora l'intero libro è stato eccezionale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top