Link Button, Image Button e PostBack

domenica 28 aprile 2013 - 06.34
Tag Elenco Tags  VB.NET  |  .NET 2.0

gsistemi Profilo | Junior Member

Ho inserito un Link Button e un Image Button all'interno di un UpdatePanel per eseguire l'aggiornamento parziale della pagina e mantenere la posizione della barra di scorrimento al momento del click. Ho notato che i due tipi di pulsanti si comportano in modo diverso.
Il primo esegue il postback e ricarica completamente la pagina, il secondo fa quello che voglio io!
C'è differenza tra i due postback o sbaglio io?

<asp:updatepanel id="updpanel1" updatemode="conditional" runat="server"><contenttemplate>
<asp:repeater id="rpt" onitemcommand="scegli_click" runat="server"><itemtemplate>
<asp:linkbutton id="scegli1" commandname='<%# databinder.eval(container.dataitem, "id") %>' commandargument='<%# databinder.eval(container.dataitem, "par") %>' runat="server" ><img src="img/button.png" /></asp:linkbutton>
<asp:imagebutton id="scegli2" imageurl="img/button.png" onclick="scegli_click2" runat="server" />
</itemtemplate></asp:repeater>
</contenttemplate></asp:updatepanel>

mexico77 Profilo | Junior Member

Il PostBack è lo stesso per entrambe. Ma su uno tu hai OnClick su un'altro no.
www.setteweb.it

gsistemi Profilo | Junior Member

Sul linkbutton c'è onitemcommand sul repeater. Comunque ho risolto, in effetti i due postback sono differenti uno è asincrono (imagebutton) e l'altro sincrono (linkbutton) anche se inserito all'interno di un updatepanel. Perchè sia così non lo so, io ho risolto così.

bisogna registrare il controllo linkbutton come postback asincrono con l'istruzione ToolkitScriptManager1.RegisterAsyncPostBackControl( nome controllo ), io avevo un problema in più in quanto il/i linkbutton sono in un repeater. Per risolvere ho dovuto inserire il comando di registrazione all'interno dell'evento onitemcreated del repeater. Il codice diventa così:

<body>
<form runat="server">
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" />
<asp:updatepanel id="updpanel1" runat="server"><contenttemplate>
<asp:repeater id="rpt" onitemcommand="scegli_click" onitemcreated="rpt_item" runat="server"><itemtemplate>
<asp:linkbutton id="scegli" commandname='<%# databinder.eval(container.dataitem, "id") %>' commandargument='<%# databinder.eval(container.dataitem, "par") %>' runat="server" clientidmode="static" ><img src="img/button.png" /></asp:linkbutton>
<asp:imagebutton id="scegli2" imageurl="img/button.png" onclick="scegli_click2" runat="server" />
</itemtemplate></asp:repeater>
</contenttemplate></asp:updatepanel>

sub rpt_item( s as object, e as repeateritemeventargs )
dim lb as linkbutton = ctype( e.item.findcontrol("scegli"), linkbutton )
ToolkitScriptManager1.RegisterAsyncPostBackControl(lb)
end sub

sub scegli_click( s as object, e as repeatercommandeventargs)
...
end sub

sub scegli2_click( s as object, e as repeatercommandeventargs)
...
end sub

in questo modo il linkbutton si comporta come imagebutton.

A chi può interessare io con questa soluzione ho avuto qualche problema con alcune istruzioni jquery che eseguo al caricamento della pagina. Praticamente alcuni comandi che eseguo al caricamento della pagina (spostare e ridimensionare dei div e span) vengono resettati dalla pressione del linkbutton. Io ho risolto così:

<body>
<form runat="server">
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" />
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args)
{
... istruzioni jquery/javascript da eseguire
}
</script>

Con questa parte di codice si eseguono le istruzioni dopo che il postback asincrono ha completato la sua richiesta. E' possibile eseguire delle operazioni anche all'inizio del postback con .add_beginRequest( nome funzione).

Spero sia utile a qualcuno!
Saluti
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5