www.doronamir.com               5994911 - 050 Mobile:               doron@doronamir.com

 

 

ASP.NET  : AutoEventWireup

 

כאשר אנו פותחים פרויקט ב VS  עבור פרויקט web ה VS יוצר אוסף קבצים המייצגים את הפרויקט , קבצי הפרויקט נמצאים ב Web Server .

קובץ ה Solution מאגד את כל קבצי הפרויקט בחלון הצפייה של ה VS

 

קובץ ה AssemblyInfo מכיל את תיאור ה assembly .

 

קובץ ה- Global.aspx מכיל מידע גלובלי על היישום כולל שגרות טיפול באירועים הקשורים ליישום באופן גלובלי .

 

קובץ ה vsdisco או disco מאפשר באופן דינאמי או סטטי  לתאר מידע לגבי Web Service ( רכיב הנמצא ברשת ומספק שירות ) .

 

קובץ ה config מכיל הגדרות קופיגורציה כלומר הגדרות הפעלה והתקנה וכללי הרשאות והגבלת משתמשים ועוד מצבים כללים החלים על היישום .

 

קובץ ה aspx  הינו דף ה web המכיל את ממשק המשתמש דף זה יכול להכיל קוד תצוגה וקוד עבור צד הלקוח וקוד הרץ בצד שרת (script runat=server) .

 

קובץ ה aspx.cs מכיל את המקור עבור צד שרת code behind ניתן לשלב את קוד המקור של צד השרת כ script בדף ה aspx (run at= server ) או בקובץ aspx.cs )לאחר בניית היישום מקומפל קוד המקור #C ל IL לתוך האסמבלי המכיל את קוד צד השרת בתוך הספרייה bin כקובץ DLL  ,

 

קובץ ה pdb מכיל מידע הקשור לפעולת ה debug . 

 


שורת ההוראה @page מכילה תכונות כגון :

 

Language = השפה שבה משתמשים בדף זה #C או VB

 

Codebehind = הקובץ המכיל את קוד המקור עבור צד השרת

 

AutoEventWireup = תכונה המאפשרת שליטה על טיפול באירוע OnPageLoad

כאשר הערך הוא True ה asp.net runtime קורא אוטומטית ל event handlers  שהשם שלהם Page_Load  ו Page_Init מצב זה אינו דורש שימוש ב delegates ובכך מגביל את המתכנת

וכאשר הערך הוא false אין קריאה אוטומטית אלא רק ע"י שימוש בdelegates כך יש אפשרות לכתוב קוד גמיש יותר

 

  AutoEventWireup="true"    Page_Load   טיפול אוטומטי בשגרה

 

private void Page_Load(object sender, System.EventArgs e)

           {// שולח מידע לדפדפן בזמן טעינת הקוד

                Response.Write("<h1>Hello</h1>");

           }

 

 

בדוגמה זו ניתן לראות כי ה Event handler Page_Load הופעל פעמיים

כאשר אנו פותחים דף ב VS נוצר קוד המטפל באירועים ניתן לראות בקוד כי נוצר Event handler

עבור Page_Load וגם Page_Init כלומר כאשר הAutEventWireup=true  שגרות ביצוע אלו יתרחשו באופן אוטומטי לכן באפן כללי השגרה Page_Load הייתה צריכה לפעול פעם אחת

אך השגרה Page_Init מפעילה delegate הקורה שוב ל Page_Load

this.Load += new System.EventHandler(this.Page_Load);

לכן קיבלנו קיראה נוספת ל Page_Load .

 

אם היה AutoEventWireup=false

לא הייתה מתבצעת קריאה אוטומטית ל Page_Load אלה רק ל Page_Init וכך לא הייתה מתבצעת אותה שגרת אירוע Page_Load פעמיים.

 

AutoEventWireup="false"

 

 

בקוד זה לא יופעל ה page_load  כי אין קיראה אוטומטית ל page_load

(אם הערך היה  AutoEventWireup=true  ה page_load היה מופעל)

 

.

 

דוגמה להפעלת page_load  גם אוטומטית וגם ע"י delegates שנמצא ב Page_Init

 

 

 במקרה זה ה page_load  העליון יופעל אוטומטית ע"י ה asp.net runtime וה-

page_load התחתון יופעל בגלל הקריאה האוטומטית ל page_Init (ראה קוד בסוף הדף)

 

 

 

 

לסיכום

AutoEventWireup זו תכונה של @ Page directive , AutoEventWireup יכולה  להכיל או true או false , ניתן לקבוע תכונה זו ב

 

·        Machine.config

·        Web.config 

·        ASP.NET Web Forms

·        Web User Controls .

 

AutoEventWireup =true

ה  asp.net runtime מבצע קריאה אוטומטית ל event handlers הסטנדרטים

ואינו דורש להתאים אירועים ל  event handlers  כלומר אין צורך ב delegates והשגרות אירוע page_load ו page_init יופעלו באופן אוטומטי

(דבר זה מגביל אותנו להשתמש ב event handler הקיימים )

 

AutoEventWireup =false

ה VS יוצר אוטומטית שגרות טיפול באירועים כולל delegates המאפשרים לנו לשלוט על הקריאה ל event handlers  ולהפנות את הטיפול לשגרה אחרת בשם חדש ולא מוכר

כאשר עובדים עם VS הערך הוא תמיד false מיכוון ש ה – VS מייצר event handlers  וגםdelegates ובכך מאפשר לתכנת באופן גמיש יותר
 

 

 

namespace WebApplication6

{

            public class WebForm3 : System.Web.UI.Page

            {

                        private void Page_Load(object sender, System.EventArgs e)

                        {

                                    Response.Write("Hello");

                        }

                        override protected void OnInit(EventArgs e)

                        {

                                   

                                    InitializeComponent();

                                    base.OnInit(e);

                        }

                        private void InitializeComponent()

                        {   

                                    this.Load += new System.EventHandler(this.Page_Load);

                        }

            }

}

 

קוד המיוצר ע"י ה VS  הכולל delegates ו Event handlers