Adding a trigger to UpdatePanel at runtime

25 בנובמבר 2008

תגיות:
תגובה אחת


אם אנחנו רוצים להוסיף AsyncPostBackTrigger ל Update Panel (בקצרה, אם יש לנו לחצן מחוץ ל UpdatePanel ואנחנו רוצים שלחיצה עליו תרפרש רק את ה – UpdatePanel ולא את כל העמוד, אנחנו משתמשים ב Trigger)


אם אנחנו רוצים להוסיף את ה – Trigger בזמן ריצה, הקוד שלנו יראה בערך כך:



 



   1     <div>


   2         <asp:ScriptManager ID="ScriptManager1" runat="server">


   3         </asp:ScriptManager>


   4         <asp:Button ID="btnWriteTime" runat="server" Text="Write Time" onclick="btnWriteTime_Click" />


   5         <asp:UpdatePanel ID="UpdatePanel1" runat="server">


   6             <ContentTemplate>


   7                 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>


   8             </ContentTemplate>


   9             <Triggers>


   10 


   11            </Triggers>


   12        </asp:UpdatePanel>


   13    </div>


 


 



   14     protected void Page_Load(object sender, EventArgs e)


   15     {


   16         AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();


   17         trigger.ControlID = "btnWriteTime";


   18         trigger.EventName = "Click";


   19         this.UpdatePanel1.Triggers.Add(trigger);


   20     }


   21 


   22     protected void btnWriteTime_Click(object sender, EventArgs e)


   23     {


   24         Label1.Text = DateTime.Now.ToLongTimeString();


   25     }



 


כשנריץ את הקוד, נגלה שזה לא עובד כמצופה,


הלחיצה הראשונה על הלחצן תרפרש רק את ה UpdatePanel אבל הלחיצה השנייה תרפרש את כל הדף,


הסיבה היא: שה – Load הוא כבר מאוחר מידי בשביל להרשם לטריגר, האירוע המאוחר ביותר שאפשר לבצע זה ב- Init, אז כדי שזה יעבוד צריך לרשום את הלחצן בזמן Init, ולא ב- Load.


 אבל לפעמים אי אפשר לרשום ב- Init, נניח שאנחנו גם מייצרים את הלחצן ב Runtime, ואנחנו לא יכולים לייצר אותו ב Init, מסיבות שונות,


במקרה הזה נוכל לעבוד על המערכת,


גיליתי שאם יש ל UpdatePanel אפילו טריגר אחד מראש, אפשר להוסיף טריגרים בכל אירוע, אפילו בלחיצה על כפתור,


אז מה שנוכל לעשות, זה לייצר לחצן שלא רואים אותו, להוסיף אותו כטריגר, ואז נוכל להוסיף טריגרים בזמן ריצה בכל מקום,




   1     <div>


   2         <asp:ScriptManager ID="ScriptManager1" runat="server">


   3         </asp:ScriptManager>


   4         <asp:Button ID="btnWriteTime" runat="server" Text="Write Time" onclick="btnWriteTime_Click" />


   5         <asp:UpdatePanel ID="UpdatePanel1" runat="server">


   6             <ContentTemplate>


   7                 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>


   8             </ContentTemplate>


   9             <Triggers>


   10                 <asp:AsyncPostBackTrigger ControlID="Button3" />


   11             </Triggers>


   12         </asp:UpdatePanel>


   13     </div>


   14     <div style="visibility:hidden">


   15         <asp:Button ID="Button3" runat="server" Text="Button3" />


   16     </div>



עכשיו אחרי שיש טריגר אחד ל UpdatePanel,


נוכל להוסיך עוד טריגרים ל UpdatePanel בכל אירוע שנרצה.


 


נ.ב. כשמוסיפים טריגר ב html לא חייבים לציין את ה – event, והוא יעבוד על ה Default Event, אבל כשמגדירים טריגר מקוד, חייבים לציין את שם ה event.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

תגובה אחת

  1. Rotem Bloom25 בנובמבר 2008 ב 8:31

    טריק נחמד מאוד תודה.

    הגב