Memorizzazione nella cache di più versioni di un controllo utente tramite attributi dichiarativi

È possibile memorizzare nella cache più versioni di un controllo utente dichiarandolo in un file ASPX più di una volta. Come avviene per i controlli utente il cui output non viene memorizzato nella cache, è possibile includere un controllo utente in una pagina ASP.NET un numero indeterminato di volte. A meno che non si sia impostato l'attributo o la proprietà Shared del controllo su true, verranno memorizzate nella cache più versioni dell'output del controllo.

Per memorizzare nella cache più versioni di un controllo utente utilizzando attributi dichiarativi

  1. Specificare le impostazioni della cache di output per il controllo utente utilizzando la direttiva @ OutputCache in un file ASCX o l'attributo PartialCachingAttribute nella classe sottostante il codice.
  2. Includere più versioni del controllo utente in una pagina, compresa la proprietà definita nella classe come attributo nell'elemento. Verificare che i valori della proprietà nella pagina siano univoci.

Questa tecnica si rivela utile quando per un controllo utente si definiscono attributi che permettono di personalizzare l'output del controllo utente in base al valore degli attributi. Nell'esempio che segue viene illustrato quanto descritto. Se il codice che segue costituisce la pagina ASPX che contiene un controllo utente, sarà possibile utilizzare l'attributo State nelle dichiarazioni del controllo per generare versioni diverse del controllo utente, una per CA e una per UT.

<%@ Register TagPrefix="MyControl" TagName="StateSort" Src="fragcache.ascx" %>

<form runat="server" >
   <p>This page was generated at <%=DateTime.Now%>.
   <br>
   <MyControl:StateSort State="CA" runat="server" />
   <br>
   <MyControl:StateSort State="UT" runat="server" />
</form>

Nel controllo utente fragcache.ascx è contenuta la proprietà State, che consente di includere l'attributo nei tag server del controllo utente della pagina.

<%@ OutputCache Duration="120" VaryByParam="None" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script language="C#" runat=server>

    public String State;

    void Page_Load(Object sender, EventArgs e)  {

        String selectCmd = "select * from Authors where state = @State";

        SqlConnection myConnection = new SqlConnection("server=(local)\\NetSDK;database=pubs;Trusted_Connection=yes");
        SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);

        myCommand.SelectCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NVarChar, 2));
        myCommand.SelectCommand.Parameters["@State"].Value = State;

        DataSet ds = new DataSet();
        myCommand.Fill(ds, "Authors");

        MyDataGrid.DataSource= ds.Tables["Authors"].DefaultView;
        MyDataGrid.DataBind();

    }

</script>

<asp:datagrid id="MyDataGrid" runat="server" />
<br>
<p>This control was generated at <% =DateTime.Now %>.
[Visual Basic]
<%@ OutputCache Duration="120" VaryByParam="None" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script language="VB" runat="server">
    Public State As String

    Sub Page_Load(sender As Object, e As EventArgs)
   
          Dim selectCmd As String = "select * from Authors where state = @State"
   
          Dim myConnection As New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes")
          Dim myCommand As New SqlDataAdapter(selectCmd, myConnection)
   
          myCommand.SelectCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NVarChar, 2))
          myCommand.SelectCommand.Parameters("@State").Value = State
   
          Dim ds As New DataSet()
          myCommand.Fill(ds, "Authors")
   
          MyDataGrid.DataSource = ds.Tables("Authors").DefaultView
          MyDataGrid.DataBind()
      
    End Sub 'Page_Load
</script>

<asp:datagrid id="MyDataGrid" runat=server/>
<br>
<p>This control was generated at <% =DateTime.Now %>.

L'inclusione nel file ASCX della direttiva @ OutputCache con un valore di durata valido consente la variazione del controllo utente nella cache di output.

Vedere anche

Memorizzazione nella cache di più versioni dell'output del controllo utente | Memorizzazione nella cache di più versioni di un controllo utente in base ai parametri | Controlli utente Web Form | Classe UserControl | Classe PartialCachingAttribute