Memorizzazione nella cache di più versioni di un controllo utente in base ai parametri

È possibile variare l'output di un controllo utente memorizzato nella cache in due modi: specificando il nome del controllo utente insieme a un parametro di una stringa di query o a un parametro di un POST di un form oppure specificando la proprietà ID di un controllo server ASP.NET contenuto nel controllo utente. Nel primo caso, utilizzare l'attributo VaryByParam della direttiva @ OutputCache o includere la proprietà VaryByParams in PartialCachingAttribute che si trova nel file di codice sottostante del controllo utente. Nel secondo caso, utilizzare l'attributo VaryByControl o includere la proprietà VaryByControls in PartialCachingAttribute.

Nota   La variazione dell'output del controllo utente nella cache in base ai parametri delle stringhe di query o ai parametri dei POST dei form verrà eseguita correttamente solo se il controllo utente esegue ed elabora il postback. Non è possibile eseguire il postback della pagina che contiene il controllo e aspettarsi che questo tipo di memorizzazione dell'output del controllo utente funzioni correttamente.

Per memorizzare nella cache più versioni di un controllo utente in modo dichiarativo utilizzando l'attributo VaryByControl

  1. Creare un controllo utente che esegue il postback.

  2. Includere una direttiva @ OutputCache nel file ASCX con gli attributi Duration e VaryByControl.

    Nota   Se si utilizza l'attributo VaryByControl nella direttiva, non sarà necessario includere anche l'attributo VaryByParam.

  3. Impostare l'attributo VaryByControl sul valore dell'attributo ID di un controllo contenuto nel controllo utente.

    Con la direttiva @ OutputCache riportata di seguito, ad esempio, la data di scadenza del controllo utente viene imposta su 60 secondi e l'output del controllo viene variato in base a un controllo server ASP.NET con proprietà ID uguale a State.

    <%@ OutputCache Duration="60" VaryByControl="State" %>
    

Per memorizzare nella cache più versioni di un controllo utente a livello di programmazione utilizzando la proprietà VaryByControls

  1. In una classe sottostante il codice creare un controllo utente che esegua il postback a se stesso.

  2. Includere un attributo dei metadati PartialCaching all'inizio del codice del controllo utente.

  3. Includere un valore per il parametro duration e impostare il parametro varyByControls sul valore della proprietà ID del controllo server ASP.NET contenuto nel controllo utente in base al quale si desidera variare l'output del controllo utente.

    Se il codice di esempio che segue viene incluso prima del codice che estende la classe UserControl, duration verrà impostato su 60 secondi e varyByControls su "State".

    [PartialCaching(60, null, State, null)]
    [Visual Basic]
    <PartialCaching(60, null, State, null)>
    

Per memorizzare nella cache più versioni di un controllo utente in modo dichiarativo utilizzando l'attributo VaryByParam

  1. Creare un controllo utente che esegue il post back a se stesso.

  2. Includere una direttiva @ OutputCache nel file ASCX con gli attributi Duration e VaryByParam.

    Nota   Se si include l'attributo VaryByControl nella direttiva **@OutputCache** di un controllo utente, non sarà necessario includere anche l'attributo VaryByParam. Indipendentemente dall'attributo incluso, impostare il valore dell'attributo su None se non si desidera utilizzare la funzionalità fornita.

  3. Impostare l'attributo VaryByParam sul parametro di una stringa di query o sul parametro di un POST di un form in base a cui si desidera variare il controllo utente.

    Con la direttiva @ OutputCache riportata di seguito, ad esempio, si imposta la scadenza del controllo utente su 60 secondi e si stabilisce che l'output del controllo varierà in base a un parametro di una stringa di query o a un parametro di un POST di un form denominato State.

    <%@ OutputCache Duration="60" VaryByParam="State" %>
    

Per memorizzare nella cache più versioni di un controllo utente a livello di programmazione utilizzando la proprietà VaryByParams

  1. In una classe sottostante il codice creare un controllo utente che esegua il postback a se stesso.

  2. Includere un attributo dei metadati PartialCaching all'inizio del codice del controllo utente.

  3. Includere un valore per il parametro duration e impostare il parametro varyByParams sul parametro di una stringa di query o sul parametro di un POST di un form in base a cui si desidera variare l'output del controllo utente.

    Se il codice di esempio che segue viene incluso prima del codice che estende la classe UserControl, duration verrà impostato su 60 secondi e varyByParams su un parametro di una stringa di query o su un parametro di un POST di un form denominato State.

    [PartialCaching(60, State, null, null)]
    [Visual Basic]
    <PartialCaching(60, State, null, null)>
    

Nell'esempio che segue viene illustrato un controllo utente che esegue il postback su se stesso tramite l'inclusione del codice per un evento ServerClick nel blocco di dichiarazione del codice del controllo. Viene inoltre mostrato come utilizzare il parametro VaryByControl per variare l'output del controllo utente nella cache di output in base ai valori delle proprietà del form aventi ID State e Country, associate ai due controlli server Web DropDownList contenuti nel controllo utente. Viene anche incluso l'attributo Shared, impostato su true per consentire a più pagine di accedere alla stessa memorizzazione nella cache dell'output del controllo utente. Nell'esempio è incluso inoltre un semplice file ASPX contenente il controllo utente. Per utilizzare questo esempio, assegnare al file del controllo utente il nome Sample.ascx.

<%@ Control Language="C#" %>
<%@ OutputCache Duration="30" VaryByControl="State;Country" Shared="true" %>
<%@ import namespace="System.Globalization"%>
<script runat=server>
  void SubmitBtn_Click(Object Sender, EventArgs e) {
    Label1.Text="You chose: " + state.SelectedItem.Text + " and " + country.SelectedItem.Text;
    TimeMsg.Text = DateTime.Now.ToString("T");
} 
</script>

<asp:DropDownList id="state" runat="server">
            <asp:ListItem> </asp:ListItem>  
            <asp:ListItem>Idaho</asp:ListItem>
            <asp:ListItem>Montana</asp:ListItem>
            <asp:ListItem>Nevada</asp:ListItem>
            <asp:ListItem>Oregon</asp:ListItem>
            <asp:ListItem>Washington</asp:ListItem>
            <asp:ListItem>Wyoming</asp:ListItem>
        </asp:DropDownList>
<br>

<asp:DropDownList id="country" runat="server">
      <asp:ListItem>  </asp:ListItem>
      <asp:ListItem>Austria</asp:ListItem>
      <asp:ListItem>France</asp:ListItem>
      <asp:ListItem>Italy</asp:ListItem>
      <asp:ListItem>Germany</asp:ListItem>
      <asp:ListItem>Spain</asp:ListItem>
      <asp:ListItem>Switzerland</asp:ListItem>
</asp:DropDownList>
<br>
<asp:button text="Submit" OnClick="SubmitBtn_Click" runat=server/>
<br>    
<asp:Label id=Label1 font-name="Verdana" font-size="10pt" runat="server">
          Select values from the lists
</asp:Label>

<br> <br>

Control generated at: <asp:label id="TimeMsg" runat="server" />
[Visual Basic]
<%@ Language="VB" %>
<%@ OutputCache Duration="30" VaryByControl="State;Country" Shared="true" %>
<%@ import namespace="System.Globalization"%>
<script runat=server>
   Sub SubmitBtn_Click(Sender as Object, e as EventArgs)
            Label1.Text="You chose: " & state.SelectedItem.Text & " and " & country.SelectedItem.Text
       TimeMsg.Text = DateTime.Now.ToString("T")
    End Sub
</script>

<asp:DropDownList id=state runat="server">
            <asp:ListItem> </asp:ListItem>  
            <asp:ListItem>Idaho</asp:ListItem>
            <asp:ListItem>Montana</asp:ListItem>
            <asp:ListItem>Nevada</asp:ListItem>
            <asp:ListItem>Oregon</asp:ListItem>
            <asp:ListItem>Washington</asp:ListItem>
            <asp:ListItem>Wyoming</asp:ListItem>
        </asp:DropDownList>
<br>

<asp:DropDownList id=country runat="server">
            <asp:ListItem>  </asp:ListItem>
            <asp:ListItem>Austria</asp:ListItem>
            <asp:ListItem>France</asp:ListItem>
            <asp:ListItem>Italy</asp:ListItem>
            <asp:ListItem>Germany</asp:ListItem>
            <asp:ListItem>Spain</asp:ListItem>
            <asp:ListItem>Switzerland</asp:ListItem>
        </asp:DropDownList>
<br>
<asp:button text="Submit" OnClick="SubmitBtn_Click" runat=server/>
<br>    
<asp:Label id=Label1 font-name="Verdana" font-size="10pt" runat="server">
          Select values from the lists
        </asp:Label>

<br> <br>

Control generated at: <asp:label id="TimeMsg" runat="server" />
</script>

[sample.aspx]
<%@ Register TagPrefix="Sample" TagName="Places" 
             Src="sample.ascx" %>
<form runat=server>
   <Sample:Places id="Control1" runat=server />
</form>

Vedere anche

Memorizzazione nella cache di più versioni dell'output del controllo utente | Memorizzazione nella cache di più versioni di un controllo utente tramite attributi dichiarativi | Controlli utente Web Form | Classe UserControl | Classe PartialCachingAttribute