Condividi tramite


Procedura: passare valori tra pagine Web ASP.NET

Aggiornamento: novembre 2007

Se l'applicazione viene reindirizzata (spostata) da una pagina Web ASP.NET a un'altra, accade spesso che si desideri passare informazioni dalla pagina di origine a quella di destinazione. Si supponga, ad esempio, di avere una pagina su cui gli utenti possono selezionare oggetti da acquistare. Quando gli utenti inviano la pagina, è necessario chiamare un'altra pagina in grado di elaborare le informazioni inserite dall'utente.

È possibile passare le informazioni tra le pagine in diversi modi, alcuni dei quali dipendono dalle modalità di reindirizzamento. Le possibili opzioni sono le seguenti:

  • Utilizzare una stringa di query che aggiunge informazioni alla fine dell'URL della pagina di destinazione. È possibile utilizzare una stringa di query quando si utilizza un controllo HyperLink per creare il sistema di spostamento all'interno di una pagina, oppure quando si esegue il reindirizzamento a livello di codice a un'altra pagina mediante il metodo Redirect.

    Il passaggio di valori in una stringa di query viene eseguito anche se le pagine non si trovano nella stessa applicazione Web; inoltre, viene eseguito anche per passare informazioni su una pagina che non è una pagina Web ASP.NET. Se la pagina di destinazione è una pagina Web ASP.NET, sarà possibile leggere il valore della stringa di query dalla proprietà QueryString dell'oggetto HttpRequest.

    Nota:

    Non passare mai dati sensibili mediante una stringa di query, perchè le informazioni sono visibili a tutti gli utenti e possono essere facilmente modificate, con conseguenti potenziali rischi relativi alla protezione.

  • Utilizzare lo stato sessione per archiviare le informazioni e renderle accessibili a tutte le pagine Web ASP.NET nell'applicazione corrente. Tale metodo richiede tuttavia la disponibilità di memoria sul server e comporta l'archiviazione delle informazioni fino alla scadenza della sessione; il carico può pertanto risultare eccessivo per un semplice passaggio di informazioni alla pagina successiva. Per informazioni dettagliate, vedere Cenni preliminari sulla gestione dello stato ASP.NET.

  • Sulla pagina di destinazione, leggere i valori del controllo e della proprietà pubblica direttamente dalla pagina di origine. Questa strategia funziona in due situazioni: quando la pagina di origine esegue l'invio incrociato alla pagina di destinazione (per ulteriori informazioni, vedere Procedura: inviare pagine Web ASP.NET a una pagina diversa) e quando viene chiamato il metodo Transfer per trasferire l'esecuzione dalla pagina di origine a quella di destinazione sul server. In questo argomento viene descritta la strategia per la lettura di valori direttamente dalla pagina di origine.

Recupero dei valori della proprietà pubblica dalla pagina di origine

Se si sta progettando la pagina di origine in modo che condivida le informazioni con le pagine di destinazione, ed entrambe le pagine sono pagine Web ASP.NET, nella pagina di origine è possibile aggiungere proprietà pubbliche che espongono informazioni che si desidera vengano condivise dalla pagine. Sarà quindi possibile leggere i valori delle proprietà nelle pagine di destinazione.

Nota:

È possibile leggere le proprietà della pagina di origine nella pagina di destinazione solo se entrambe le pagine si trovano nella stessa applicazione Web.

Per recuperare i valori delle proprietà pubbliche dalla pagina di origine

  1. Sulla pagina di origine, creare un o più proprietà pubbliche.

    Nel seguente esempio di codice viene illustrata una proprietà denominata CurrentCity che espone il valore di un controllo TextBox denominato textCity.

    Public ReadOnly Property CurrentCity() As String
        Get
            Return textCity.Text
        End Get
    End Property
    
    public String CurrentCity
    {
        get
        {
            return textCity.Text;
        }
    }
    
    Nota:

    In genere, le proprietà sulla pagina di origine create principalmente per esporre i valori di cross-page posting sono proprietà di sola lettura. Anche se la pagina di origine può contenere proprietà di lettura/scrittura pubbliche, l'impostazione di una proprietà della pagina di origine dalla proprietà della pagina di destinazione non ha generalmente alcuno scopo, in quanto il valore non verrà mantenuto.

  2. Sulla pagina di destinazione, aggiungere una direttiva della pagina @ PreviousPageType che fa riferimento alla pagina di origine.

    Nel seguente esempio di codice viene illustrata una direttiva PreviousPageType che fa riferimento a una pagina di origine denominata SourcePage.aspx.

    <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 
    

    La direttiva PreviousPageType fa sì che la proprietà PreviousPage della pagina sia tipizzata sulla classe della pagina di origine.

  3. Nel codice della pagina di destinazione, utilizzare membri fortemente tipizzati della proprietà PreviousPage per leggere le proprietà del codice di origine.

    Nel seguente esempio di codice viene letto il valore della proprietà CurrentCity definito nella pagina di origine.

    Label1.Text = PreviousPage.CurrentCity
    
    Label1.Text = PreviousPage.CurrentCity;
    

Recupero di informazioni sul controllo dalla pagina di origine nella stessa applicazione

Se le pagine di origine e di destinazione sono pagine Web ASP.NET e si trovano nella stessa applicazione Web, è possibile leggere i valori dei controlli sulla pagina di origine mentre viene visualizzata la pagina di destinazione. Questa strategia può essere utilizzata se la pagina di origine non espone proprietà pubbliche contenenti le informazioni necessarie.

Per ottenere i valori dei controlli dalla pagina di origine nella stessa applicazione

  • Sulla pagina di destinazione, recuperare un riferimento alla pagina di origine utilizzando la proprietà PreviousPage della pagina di destinazione, quindi chiamare il metodo FindControl per recuperare un riferimento al controllo desiderato.

    Nel seguente esempio di codice, il valore del controllo TextBox1 della pagina di origine viene ottenuto e, successivamente, visualizzato nel controllo denominato Label1.

    If Not Page.PreviousPage Is Nothing Then
        Dim SourceTextBox As TextBox
        SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _
            TextBox)
        If Not SourceTextBox Is Nothing Then
            Label1.Text = SourceTextBox.Text
        End If
    End If
    
    if (Page.PreviousPage != null)
    {
        TextBox SourceTextBox = 
            (TextBox)Page.PreviousPage.FindControl("TextBox1");
        if (SourceTextBox != null)
        {
            Label1.Text = SourceTextBox.Text;
        }
    }
    
    Nota:

    Il metodo FindControl trova i controlli nel contenitore di denominazione corrente. Se il controllo che si sta ricercando si trova all'interno di un altro controllo (generalmente all'interno di un modello), è prima necessario recuperare un riferimento al contenitore, quindi ricercare il contenitore per trovare il controllo che si desidera ottenere.

Recupero di informazioni inviate dalla pagina di origine in un'altra applicazione

Se la pagina di origine e quella di destinazione non si trovano nella stessa applicazione Web, è possibile leggere nella pagina di destinazione i valori inviati della pagina di origine. Questa tecnica è valida anche nel caso in cui solamente la pagina di destinazione sia una pagina Web ASP.NET. Si noti che è possibile ottenere solamente i valori inviati; non è possibile leggere sulla pagina i valori dei controlli arbitrari.

Per ottenere i valori dei controlli dalla pagina di origine in un'altra applicazione

  • Nella pagina di destinazione leggere l'insieme Form, che restituisce un dizionario di coppie nome/valore, con una coppia per ciascun valore inviato.

    Nel seguente esempio di codice vengono visualizzati l'ID e il valore di ogni controllo inviato nella pagina di origine, nonché i valori inviati in un'etichetta denominata Label1.

    Nota:

    Le informazioni inviate dalle pagine Web ASP.NET includono i valori di campi nascosti, quali __VIEWSTATE, __EVENTTARGET e __EVENTARGUMENT, utilizzati per l'elaborazione interna nella pagina. Nel seguente esempio di codice vengono esclusi i valori dei campi inviati denominati con un carattere di sottolineatura doppia (__).

    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Load
        Dim displayValues As New StringBuilder()
        Dim postedValues As NameValueCollection = Request.Form
        Dim nextKey As String
        For i As Integer = 0 To postedValues.AllKeys.Length - 1
            nextKey = postedValues.AllKeys(i)
            If nextKey.Substring(0, 2) <> "__" Then
                displayValues.Append("<br>")
                displayValues.Append(nextKey)
                displayValues.Append(" = ")
                displayValues.Append(postedValues(i))
            End If
        Next
        Label1.Text = displayValues.ToString()
    End Sub
    
    void Page_Load(object sender, EventArgs e)
    {
        System.Text.StringBuilder displayValues = 
            new System.Text.StringBuilder();
        System.Collections.Specialized.NameValueCollection 
            postedValues = Request.Form;
        String nextKey;
        for(int i = 0; i < postedValues.AllKeys.Length - 1; i++)
        {
            nextKey = postedValues.AllKeys[i];
            if(nextKey.Substring(0, 2) != "__")
            {
                displayValues.Append("<br>");
                displayValues.Append(nextKey);
                displayValues.Append(" = ");
                displayValues.Append(postedValues[i]);
            }
        }
       Label1.Text = displayValues.ToString();
    }
    

Vedere anche

Attività

Procedura: determinare come sono state richiamate le pagine Web ASP.NET

Concetti

Cross-page posting nelle pagine Web ASP.NET

Cenni preliminari sulla gestione dello stato ASP.NET