
Durante la realizzazione di un'applicazione Web, mi stavo occupando della gestione degli utenti; ho utilizzato
una GridView (con paginazione) per la visualizzazione degli utenti (vedi figura).
Per consentire una gestione più semplice ed intuitiva degli utenti ho impostato dei pulsanti sotto la GridView.
Il tutto naturalmente era stato inserito in un UpdatePanel permettendo all'utente di avere un'ottima user-
experience (vedi codice).
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</asp:ScriptManagerProxy>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="gvUtenti" runat="server" AllowPaging="True"
PageSize="10" DataSourceID="odsUtenti" >
<PagerSettings Mode="NumericFirstLast" Position="TopAndBottom" />
<Columns>
<asp:BoundField DataField="UserName" HeaderText="User name" />
<asp:BoundField DataField="Email" HeaderText="Indirizzo E-mail" />
<asp:BoundField DataField="RoleName" HeaderText="Stato" />
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="Details" runat="server"
ImageUrl="Percorso Immagine" /></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="Select" runat="server"
Checked="false" /></ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
Non ci sono utenti</EmptyDataTemplate>
</asp:GridView>
<asp:ObjectDataSource ID="odsUtenti" runat="server"
SelectMethod="SelezionaUtenti" TypeName="ClassManagerUstenti">
</asp:ObjectDataSource>
</div>
<p>
<asp:ImageButton ID="SelectAll" runat="server"
ImageUrl="Percorso immagine"/>
<asp:ImageButton ID="cmd1" runat="server"
ImageUrl="Percorso immagine" />
<asp:ImageButton ID="cmd2" runat="server"
ImageUrl="Percorso immagine"/>
<asp:ImageButton ID="Delete" runat="server"
ImageUrl="Percorso immagine"/>
</p>
</ContentTemplate>
</asp:UpdatePanel>
È a questo punto che sono iniziati i problemi in quanto quando passavo da una pagina all'altra della GridView i pulsanti inseriti per la gestione degli
utenti venivano raddoppiati
(vedi figura).
Dopo aver fatto diverse prove ho pensato che il problema potesse essere legato all'UpdatePanel, infatti
rimuovendo completamente l'UpdatePanel la duplicazione dei pulsanti non si verificava più, ma veniva
compromessa la user-experience dell'utente. Comunque avevo focalizzato il problema, era legato al rendering
dell'UpdatePanel quindi legato alle librerie Ajax.
Il problema si risolve molto semplicemente utilizzando due UpdatePanel uno per la GridView e l'altro per i pulsanti (vedi codice).
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</asp:ScriptManagerProxy>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="gvUtenti" runat="server" AllowPaging="True"
PageSize="10" DataSourceID="odsUtenti">
<PagerSettings Mode="NumericFirstLast" Position="TopAndBottom" />
<Columns>
<asp:BoundField DataField="UserName" HeaderText="User name" />
<asp:BoundField DataField="Email" HeaderText="Indirizzo E-mail" />
<asp:BoundField DataField="RoleName" HeaderText="Stato" />
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="Details" runat="server"
ImageUrl="Percorso Immagine" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="Select" runat="server"
Checked="false" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
Non ci sono utenti</EmptyDataTemplate>
</asp:GridView>
<asp:ObjectDataSource ID="odsUtenti" runat="server"
SelectMethod="SelezionaUtenti" TypeName="ClassManagerUtenti">
</asp:ObjectDataSource>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<p>
<asp:ImageButton ID="SelectAll" runat="server"
ImageUrl="Percorso immagine"/>
<asp:ImageButton ID="cmd1" runat="server"
ImageUrl="Percorso immagine" />
<asp:ImageButton ID="cmd2" runat="server"
ImageUrl="Percorso immagine"/>
<asp:ImageButton ID="Delete" runat="server"
ImageUrl="Percorso immagine"/>
</p>
</ContentTemplate>
</asp:UpdatePanel>

Dopo aver inserito i due UpdatePanel quando si cambia pagina alla GridView, i pulsanti non vengono duplicati
(vedi figura).