DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

Usare lo ScriptManager per determinare quale controllo run-time ha causato un evento in AsyncPostBack

Spesso nelle nostre applicazioni ASP.NET ci troviamo di fronte all'esigenza di aggiungere controlli in fase di run-time in modo da rendere completamente dinamico il comportamento delle nostre pagine.  Ultimamente mi sono scontrato con la necessità di utilizzare questa tecnica all'interno del controllo UpdatePanel di ASP.NET AJAX.
Anzitutto, è importante precisare come non sia possibile aggiungere controlli direttamente nell'UpdatePanel (non possiamo quindi fare una cosa di questo tipo: MyUpdatePanel.Controls.Add(...)). Siamo quindi vincolati a prevedere dei container (es. Panel) da collocare nel ContentTemplateContainer dell' UpdatePanel per procedere all'aggiunta dei nostri controlli.
Uno dei modi più veloci e funzionali per poter poi riuscire a determinare quale controllo run-time all'interno dell' UpdatePanel ha generato un evento in modalità AsyncPostBack, sfrutta semplicemente l'oggetto Request della pagina relativamente allo ScriptManager dichiarato.
Andando in ordine, questa è una pagina di esempio:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
    <
title>UpdatePanel con controlli Run-Time</title>
<
/head>
<
body>
    <
h1>UpdatePanel con controlli Run-Time</h1>
    <
form id="form1" runat="server">
        <
div>
            ID="MyScriptManager" runat="server" EnablePartialRendering="true" />
            ID="MyUpdatePanel" runat="server" UpdateMode="Conditional" RenderMode="Block">
                                    
                    ID="StatusLbl" runat="server"></asp:Label>                    
                    <
br />
                    <
br />                    
                    ID="ControlsPanel1" runat="server"></asp:Panel>
                    <
br />
                    ID="ControlsPanel2" runat="server"></asp:Panel>
                <
/ContentTemplate>
            <
/asp:UpdatePanel>
        <
/div>
    <
/form>
<
/body>
<
/html>


E questo è il relativo CodeFile.

   ...
   
 
protected void Page_Load(object sender, EventArgs e)
 {
     AddMyControls(); // Aggiunta dei controlli alla Pagina

     
if (MyScriptManager.IsInAsyncPostBack)
     {
       string MyScriptManagerRequest = Request[MyScriptManager.ID];

       // Visualizziamo il contenuto della richiesta dello ScriptManager

       StatusLbl.Text = MyScriptManagerRequest ;

       
if (MyScriptManagerRequest.Contains("Button1"))
       {
          
// Fai qualcosa...
       
}
       
else if (MyScriptManagerRequest.Contains("Button2"))
       {
          
// Fai qualcosa...
       
}
     }        
 }

 
private void AddMyControls()
 {
   Button button1 = 
new Button();
   button1.ID = "Button1";
    ...
   Button button2 = 
new Button();
   button2.ID = "Button2";
    ...
   ControlsPanel1.Controls.Add(button1);
   ControlsPanel2.Controls.Add(button2);
 }
    
 ...

Occorre porre attenzione al fatto che il contenuto di Request[MyScriptManager.ID] , ovvero la stringa nel POST Http corrispondente al nostro ScriptManager (MyScriptManager), contiene qualcosa del tipo "<ID UpdatePanel>|<ID Controllo>" (nel nostro caso ad esempio "MyUpdatePanel|Button1").
Possiamo quindi processare questa stringa per capire quale controllo ha causato il PostBack asincrono e quindi procedere con la nostra logica di business.

Print | posted on Sunday, April 29, 2007 11:55 PM | Filed Under [ ASP.NET AJAX ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET