SlideShare a Scribd company logo
ASP.NET ליווי מקצועי  :  ארז קלר www.corner.co.il Web Services מצגת זו מתבססת על המצגת המקורית שנכתבה ע " י :  אקת ' ם חאג '  יחיא
מבוא ל -  ASP.NET   . יצירת טפסי  Web   . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
מאפייני  ASP.NET ASP.NET   היא טכנולוגיה מבית היוצר של מיקרוסופט שמיועדת לפיתוח אפליקציות לרשת   .  טכנולוגיה זו הינה חלק מה -  Microsoft .NET Framework ,  ולכן יכולה להשתמש בכל רכיבי ה - Class Library   של  NET .. מיועדת לעבודה בצד השרת . הדפים שנוצרים מתורגמים בעזרת מנוע מיוחד המותקן בצד השרת ומוחזרים ללקוח כדפי  HTML . כמו כל טכנולוגיות  .NET   גם  ASP.NET   היא  OOP  . מבוא ל -  ASP.NET
מאפייני  ASP.NET  -  המשך כמו כל תוכנית הכתובה ב -  .NET   גם יישומי  ASP.NET   מקומפלים מראש ,  ועוברים אינטרפטציה בזמן בקשה . ASP.NET   אינה שפת תכנות אלא טכנולוגיה שמשתמשת במספר שפות תכנות כמו  C# ,  VB.NET J#, JSCRIPT.NET   וכו ... לכתיבת קוד בשפות תכנות יש יתרון גדול על כתיבת קוד בשפות סקריפטים כמו  JScript   ו '  VBScript . מבוא ל -  ASP.NET
מבוא ל -  ASP.NET מאפייני  ASP.NET  –  המשך ב -  ASP.NET   קוד ה -  HTML   מופרד מהקוד הלוגי של הדף  ( Code Behind ),  הפרדת הקוד מהמראה הוויזואלי של הדף מהווה יתרון עצום ,  עליו נדבר בהמשך . ב -  ASP   הקלאסית היו  5  אובייקטים ,  עליהם התבסס קוד ה -  Script  ,  ב -  ASP.NET   ישנם למעלה מ - 3400  מחלקות מוכנות לשימוש . טכנולוגיית  ASP.NET   היא לא רק טכנולוגיה ליצירת אתרי אינטרנט ,  אלא ,  מכילה גם את שירותי הרשת  ( Web Services )  באמצעותם יישומים יכולים לקבל שירותים דרך הרשת . ASP.NET   מכילה פקדי שרת  (Web Controls) ,  שמפשטים את העבודה ומתאימים את הקוד לדפדפן שקרא להם ומוכרים על ידי השרת ,  הפעלת אירועים מתבצעת בצד השרת .
מבוא ל -  ASP.NET מאפייני  ASP.NET  –  המשך מגדירה קבצי קונפיגורציה  ( machine.config   ו  web.config )  אשר מכילים את ההגדרות של האפליקציה או חלקים ממנה . יותר יציבה ומאובטחת . שילוב טוב יותר עם  XML   ו - ADO.NET  . איתור באגים קל יותר .
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET אפליקציית  ASP.NET   מכילה את הקבצים הבאים : .aspx  –  ASP.NET Web Form .aspx.cs  –  code behind page  –  פונקציונליות . Global.asax  –  קובץ שמכיל את כל המשתנים הגלובליים והאירועים ברמת האפליקציה  , לדוגמה :  מה יתבצע כאשר האפליקציה עולה או יורדת . Web.config  –  הגדרות קונפיגורציה .
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET דף  aspx   מכיל שלושה חלקים עיקריים : הנחיית הדף  ( page directive ) :  הגדרות מאפייני הדף .  קוד צד - לקוח וקוד צד - שרת   :  קוד המופעל על ידי הלקוח  ( דפדפן )  למשל  JScript   והקוד שרץ בצד השרת  ( IIS ). HTML   ופקדי השרת :  מגדיר את מראה הדף על ידי פקדי  HTML   או פקדי שרת  ( שהם חידוש משמעותי ב -  ASP.NET )
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET הנחיית הדף  ( Page directive ) מרכיב חשוב בדף  aspx  . מספק הנחיות טיפול בדף ל -  Parser   ול -  Compiler . מוגדר בראש הדף בין התגיות  :  התגית  <%  page @ <%  . דוגמה : <%@ Page language=&quot;c#&quot;  Codebehind=&quot;WebForm1.aspx.cs&quot;  AutoEventWireup=&quot;false“ Inherits=&quot;WebApplication1.WebForm1&quot; %> הגדרת שפה התכנות הקובץ שמכיל את קוד צד - השרת המחלקה הממומשת ב -  Code Behind לטיפול באירוע הדף   Parser  -  תכנית ניתוח ,  תכנית המחלקת קלט טקסטואלי לחלקים קטנים יותר ומעבדת אותם
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET קוד צד - לקוח  ( Client Side )  וקוד צד - שרת   ( Server Side ) דפי  aspx   יכולים להכיל קוד שרץ בצד השרת וקוד שרץ בצד הלקוח . קוד שרץ בצד לקוח יכול להגדיר אלמנטים עיצוביים  ( שינוי צבע רקע של פקד בזמן שהעכבר עובר מעליו ),  בדיקת תקינות קלט משתמש וכו '. תפקידו של קוד שרץ בצד שרת הוא לטפל באירועי הפקדים ואירועי היישום . יתרונותיו של קוד בצד שרת  :  הקוד מוסתר מהלקוח ,  מקומפל ,  יכול לגשת למשאבי השרת ,  יכול להשתמש בכל מרכיבי  .NET
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET קוד צד - לקוח  -  דוגמה ניתן להוסיף את קטע הקוד הבא בין תגיות ה -  Head   של הדף : קוד צד שרת נכתב ב -  Jscript   או ב -  VBScript  . <script language=&quot;javascript&quot;>  function Form1_onmousemove()  { document.bgColor=&quot;c5c5ff&quot;; }  </script>
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET קוד צד שרת קוד צד שרת ניתן לכתוב בדף  aspx   או בדף נפרד המכונה  code behind . לדוגמה : public class WebForm1 : System.Web.UI.Page { … private void Button1_Click(object sender, System.EventArgs e) { int num1=int.Parse(TextBox1.Text); int num2=int.Parse(TextBox2.Text); Label1.Text=(num1+num2).ToString(); } ... }
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET דף  aspx   מורכב משני קבצים : MyPage.aspx  –  כתוב בפורמט  HTML  . MyPage.aspx.cs  –  כתוב בשפת  NET   במקרה זה  # C . בדף  aspx   מוגדר העיצוב / המראה של האתר ,  מכיל הגדרות של פקדי  HTML   ופקדי שרת .  כל הפקדים חייבים להופיע בין התגיות . . . </form>  <form> .  כמו כן  ,  בדף זה ניתן לכתוב את קוד צד הלקוח . דף  aspx.cs   מכונה  Code Behind   מטפל באירועי הפקדים ואירועי היישום בצד שרת .
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET פקדי שרת מוגדרים באמצעות תגיות מיוחדות ,  לדוגמה : <asp:TextBox id=&quot;TextBox1&quot; runat=&quot;server&quot;> <asp:TextBox/> בעת החזרת הדף ללקוח הם מתורגמים לתגיות  HTML   סטנדרטיות  : <input type=&quot;text&quot; id=&quot;TextBox1&quot; />
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET דוגמה :  MyPage.aspx   <%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot;  CodeFile=&quot;Default.aspx.cs&quot; Inherits=&quot;_Default&quot; %> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; > <head runat=&quot;server&quot;>   <title>Untitled Page</title>   </head> <body> <form id=&quot;form1&quot; runat=&quot;server&quot;> <asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot; Text=&quot;Label&quot;></asp:Label> <asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot;    OnTextChanged=&quot;TextBox1_TextChanged&quot;>   </asp:TextBox> <asp:Button ID=&quot;Button1&quot; runat=&quot;server&quot; OnClick=&quot;Button1_Click&quot;  Text=&quot;Button&quot; />   </form> </body> </html>
מבוא ל -  ASP.NET מבנה אפליקציית  ASP.NET דוגמה  :  MyPage.aspx.cs   public partial class _Default : System.Web.UI.Page  { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; } } טיפול באירוע פקד בצד שרת
מבוא ל -  ASP.NET מודל ההרצה  ( Request/Response ) מודל ההרצה מתאר מצב שבו הלקוח מבקש דף באמצעות שליחת בקשה לשרת ,  השרת מגיב ומספק את הדף המבוקש ללקוח . התהליך  : הלקוח שולח בקשה  ( Request )  לשרת . השרת בודק את סיומת הקובץ ,  אם מדובר בסיומת מסוג  htm   או  ,html הוא שולף את הקובץ המבוקש ומחזיר אותו מיידית ללקוח . אם מדובר בסיומת מסוג  aspx , ( זה מה שמעניין אותנו בשלב זה (   הבקשה עוברת תהליך עיבוד ולאחר מכן המידע מועבר ללקוח .
מבוא ל -  ASP.NET מודל ההרצה  ( Request/Response ) תהליך הבקשה / תגובה : דפדפן שרת   שליחת בקשה לשרת עיבוד הבקשה יצירת דף  HTML שליחת דף  HTML   לדפדפן הצגת הדף בניית בקשה
מבוא ל -  ASP.NET מודל ההרצה  ( Request/Response ) כאשר השרת מזהה בקשה עם סיומת  aspx   הוא מעביר את הבקשה מיד ל &quot; מנוע &quot;  ASP.NET . מנוע ה -  ASP.NET   מבצע הידור  לשפת הביניים  ( IL   או  MSIL   Microsoft  Intermediate  Language )   ממיר אותה לשפת מכונה  ( Native Code ). ה - CLR   שומר את שפת המכונה של הדף .  אחרי שהקוד עבר הידור מתחיל שלב קישור קוד המקור  , תרגום פקדי השרת לתגיות  HTML   ועיבוד אירועי המערכת . בסוף  ASP.NET   מתאימה את הקוד לסוג הדפדפן שבקש את הדף ושולחת אליו קובץ  HTML .
CLR- Common Language Runtime   מספק את הממשק בין ה   NET Framework .  ושפות התכנות  .  מפשט פיתוח אפליקציות  אחראי להרצת האפליקציה  :  מספק סביבת עבודה בטוחה  ,  תומך בריבוי שפות ומנהל את הזיכרון  ,  את יצירת האובייקטים ואת הקריאה לשיטות בהן משתמשת האפליקציה . יודע לתרגם  MSIL   לשפת מכונה CLR  –  סביבה שמנהלת הפעלת קוד .  מפעילה ומתחזקת את הקוד שכתבנו .
מבוא ל -  ASP.NET Client Server INTERPRETER MSIL מבוא ל -  ASP.NET מודל ההרצה  ( Request/Response ) בקשת הדף בפעם הראשונה NATIVE CODE בקשה לדף  aspx קבלת  HTML
מבוא ל -  ASP.NET מודל ההרצה  ( Request/Response ) כאשר הלקוח מבקש את הדף בפעם השנייה ,  ה -   CLR   בודק אם היה שינוי בקוד .  אם כן  asp.net   תבצע הידור מחדש לדף . אם בבקשה השניה לא היה שינוי בקוד ,  asp.net   לא תבצע את ההידור וזמן החזרת הדף ללקוח יקטן בצורה משמעותית .
מבוא ל -  ASP.NET מודל ההרצה  ( Request/Response ) בקשת הדף בפעם השנייה Client Server INTERPRETER MSIL NATIVE CODE בקשה לדף  aspx קבלת  HTML X X
הרצת יישום  ASP.NET הצגת הדגמה מדיסק  ..\CopyCdMicAspAndAdo\Default.htm D:\Zehava\Web ApplicationsTeacherCourse\CopyCdMicAspAndAdo\Default.htm
מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
יצירת טפסי  Web דפי  aspx   הם קבצי טקסט הכתובים בפורמט  HTML . דפי  aspx   מכילים טופס  WEB  ( Web Form )  אחד ויחיד . בטופס  WEB   מעצבים את הדף על ידי הצבת פקדים . הם מוצגים כמסמכי  HTML   בדפדפן . אפשר לכתוב אותם בכל עורך טקסט רגיל כמו למשל בפנקס הרשימות . כדי שהשרת ידע שמדובר בטופס  aspx ,  חייבים לתת לו את הסיומת  aspx .
יצירת טפסי  Web ישנן שני דרכים ליצירת טפסי  Web : כתיבת ידנית של קוד בעורך טקסט פשוט כמו פנקס הרשימות . שימוש בסביבות עבודה ותוכנות מתוחכמות כמו  Visual Studio .Net . עדיף להשתמש בסביבת הפיתוח ,  מספקת כלים גראפיים שמקלים על תהליך העיצוב של הטופס   -  What You See Is What You Get  ( WYSIWYG )
יצירת טפסי  Web כתיבה בעזרת פנקס הרשימות כתיבת הקוד הבא פנקס הרשימות  : <%@ Page language=&quot;c#&quot; %> <HTML> <HEAD> <title>Test page</title> </HEAD> <body> <form id=&quot;Form1&quot; method=&quot;post&quot; runat=&quot;server&quot;> <asp:Label id=&quot;Label1&quot;  runat=&quot;server&quot;>   hello world   </asp:Label> </form> </body> </HTML>
יצירת טפסי  Web כתיבה בעזרת פנקס הרשימות  -  המשך שמור את הקובץ בשם  test.aspx   על השרת המקומי במחשב שלך . השרת המקומי נמצא בדרך כלל בכונן  C  בתיקיה :  c:/Inetpub/wwwroot ,  במידה והוא נמצא בכונן אחר ,  שנה את השם שלו בהתאם . הפעל את הדפדפן וכתוב את שם הקובץ וכתובת השרת המקומי בכתובת ה -  URL . http://localhost/test.aspx קוד זה יציג את המשפט  &quot;hello world” .
יצירת טפסי  Web כתיבה בעזרת פנקס הרשימות – המשך הדף שמתקבל : קוד המקור של הדף מכיל רק תגיות  HTML ,  משום שזה מה שהדפדן מסוגל להציג .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET   יצירת פרויקט חדש מסוג  ASP.NET WebApplication ,  והגדרת שם לפרוייקט .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  -  המשך לחיצה על  OK   מציגה את העורך הגראפי  ( Designer )  של  VS.NET .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  –  המשך בחלון ב -  SolutionExplorer   מופיעים מרכיבי הפרוייקט , נתעלם מכולם ונתמקד בקובץ  WebForm1.aspx . זהו קובץ  שנוצר אוטומטית בעת יצירת הפרוייקט .  ניתן להשתמש בו ,  לשנות לו את השם או למחוק אותו . הקובץ מכיל טופס אחד כמו כל קבצי ה -  aspx  . ניתן להוסיף לפרוייקט קבצי  aspx   נוספים .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  –  המשך הוספת קובץ  aspx   לפרוייקט : לחיצה ימנית על שם הפרויקט ב -  Solution Explorer  . בחירת  Add   ומהתפריט שנפתח בוחרים  Add Web Form .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  –  המשך הוספת קובץ  aspx   לפרוייקט  -  המשך : בחלון שנפתח משנים את שם ברירת המחדל של הקובץ ל - MyFirstWebForm.aspx .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  –  המשך הוספת קובץ  aspx   לפרוייקט  -  המשך : כאשר נלחץ על  Open   נקבל טופס  Web   חדש . כעת ניתן לגרור לטופס החדש שנוצר פקדים .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  –  המשך הוספת פקדים לטופס : נגרור תיבת טקסט  ( TextBox )  וכפתור  ( Button )  מארגז הכלים שנמצא בצד שמאל של הטופס ונציב אותם בטופס .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  –  המשך בתחתית הטופס קיימת תווית המאפשרת לעבור בין קוד ה -  HTML   לטופס העיצוב ולהפך .  כאשר נרצה לראות את קוד ה -  HTML   שנוצר נלחץ על המילה  HTML   שבתווית .
יצירת טפסי  Web יצירת דף באמצעות  Visual Studio.NET  –  המשך הוספת פקדים לטופס : מקליקים הקלקה כפולה עם העכבר על הכפתור ובחלון שנפתח נכתוב את הקוד הבא  ( המסומן בכחול ): private void Button1_Click(object sender, System.EventArgs e) { TextBox1.Text=&quot;hello word&quot;; } החזרה לטופס העיצוב מתבצעת באמצעות התווית  View Designer  ( התווית השנייה משמאל )  או באמצעות  SHIFT+F7 .
מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
Code Behind דף  aspx   מורכב מרכיבי תצוגה המגדירים את חזות הטופס וקוד המטפל באירועי הפקדים . רכיבי התצוגה מוגדרים באמצעות קוד  HTML  . הטיפול באירועים מתבצע באמצעות שפת  .NET   כלשהיא  ( C#, VB.NET   וכו ')  ישנן שלוש שיטות להוספת קוד ל -  Web Form :   Mixed Code :  הקוד ותגיות ה -  HTML   נמצאים באותו קובץ ומעורבים זה בזה . Inline Code :  הקוד ותגיות ה -  HTML   נמצאים באותו קובץ אבל מופרדים אחד מהשני באמצעות התגית  <SCRIPT> . Code Behind :  הקוד ותגיות ה -  HTML   נמצאים בקבצים נפרדים .
Code Behind Code Behind   הוא אחת האפשרויות החדשות ב -  ASP.NET ,  פותחה על מנת להפריד את קוד המקור מקוד ה -  HTML . חלום רטוב של מפתחי ה -  ASP   הקלאסי . מגדיר קובץ נפרד מקובץ ה -  aspx   לצורך טיפול באירועי הפקדים בטופס . על פי טכניקה זו עיצוב הדף נקבע בקובץ  aspx   ונכתב בפורמט  HTML  ,  הטיפול באירועים מתבצע בקובץ נפרד ששמו זהה לשם קובץ ה -  aspx   אולם בתוספת סיומת תקנית של השפה בה הוא נכתב  (  cs   או  vb ).  לדוגמה  :  עיצוב הטופס נקבע בקובץ  MyPage.aspx   והקוד המטפל באירועי הפקדים נכתב בקובץ  MyPage.aspx.cs  .
Code Behind <tags> Code Single File Code Behind Form1.aspx Form1.aspx Form1.aspx.cs השוואה בין קוד שנמצא בתוך הקובץ לקוד שנמצא בנפרד מהקובץ  ( Code Behind ). <tags> Code
Code Behind יתרונות מפתחים  (developers)   ומעצבים  ( Designers )  יכולים לעבוד בנפרד .  המעצב מתמקד בעיצוב הוויזואלי של הדף ,  בזמן שהמפתח מתמקד בכתיבת הקוד בלבד . אחרי הקומפילציה ה -  Code Behind   הופך לקובץ  MSIL   עם הסיומת  dll   ותוכנו מוסתר . קריא וברור יותר . תחזוקה קלה יותר ,  שינוי הקוד אינו משפיע על האלמנטים הויזואליים ,  ושינוי מראה הדף אינו משפיע על הקוד .  הקבצים קטנים ומסודרים יותר . הקוד יכול להכתב בכל שפות הדוט . נט .
Code Behind שני הקבצים ,  דף ה -  aspx   ודף ה -  code behind   חייבים להיות מקושרים אחד לשני . קישור שני הדפים נעשה באמצעות התגית  @page  שנקראת תגית הנחיית הדף  ( page directive ). אחרי קישור הקבצים הם יעבדו ביחד כיחידה אחת . קובץ ה -   Code  Behind WForm1.aspx <%@ Page language=&quot;c#&quot; Codebehind=&quot;WForm1.aspx.cs&quot;  Inherits=&quot;WebApp1.WForm1&quot; %>
Code Behind WebForm1.aspx WebForm1.aspx.cs
Code Behind בסיום הכתיבה המהדר מקמפל את כל קבצי ה -  Code Behind   לקובץ  dll   אשר מותקן בספריה  Bin   שבעצמה נמצאת בספריה הוירטואלית .  כאשר הלקוח מבקש דף  aspx  ( Request ),  ה - CLR   מבצע הידור ל - dll   מריץ אותו ומקשר אותו לדף ה -  aspx   המתאים ,  רק לאחר מכן מנוע ה -  ASP.NET   מסוגל לייצר את ה -  HTML   ולהחזיר אותו ללקוח  ( Response ).
Code Behind Response Response Page Class Instantiate, process and render Gen’d Page Class File Generate Instantiate Parse ASPX Engine ASPX File Request Request Code- behind class file ASPX File
מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
טיפול באירועים האירוע  Page_Load   האירוע  Page_Load   מתרחש אוטומטית בכל פעם שהדף נטען ,  בין אם זה כתוצאה של בקשה בפעם הראשונה של הדף או כתוצאה של תגובה של השרת לאירוע שהתרחש . הוא מתרחש רק אחרי אתחול הדף ויצירת פקדי השרת ,  כדי ש -  ASP.NET   תוכל לטפל באירועים שלהם . תפקידו לבצע איתחולים לדף ולפקדים . private void Page_Load(object sender,System.EventArgs e) {  . . . }
טיפול באירועים האירוע  Page_Load   -  המשך Page_Load Page_Unload Control events Textbox1_Changed Button1_Click Page_Init Change Events Action Events Page is disposed
טיפול באירועים Page.IsPostBack בכל בקשה  ( גם בבקשה חוזרת של אותו הדף )  נוצר דף חדש .  האירוע  Page_Load   מתרחש בכל טעינה של הדף ,  לכן הקוד שנמצא באירוע הזה מופעל כל פעם מחדש . בקשה חוזרת של אותו הדף מכונה  ( Round Trip ). לעיתים נרצה לבצע איתחולים רק בטעינה הראשונה של הדף ולהימנע מהם בבקשות חוזרות של אותו הדף . בדף מוגדר מאפיין בוליאני בשם  IsPostBack ,  ASP.NET  משתמשת במאפיין זה על מנת לבדוק אם הוא נדרש בפעם הראשונה או לא  ( Round Trip ). כאשר הלקוח מבקש את הדף בפעם הראשונה ,  המאפיין  IsPostBack   יקבל את הערך  false .  מהבקשה השניה ואילך ערכו  true .
טיפול באירועים Page.IsPostBack  -  המשך נשתמש בו באירוע  Page_Load   בצורה הבאה : private void Page_Load(object sender,System.EventArgs e) {  if (!Page.IsPostBack) { //  הקוד מתבצע רק כאשר הדף נשלח בפעם הראשונה } //  הקוד מתבצע בכל פעם שהדף נשלח }
טיפול באירועים Page.IsPostBack  -  המשך דוגמה :  נניח שקיים הדף הבא : המכיל פקד  ListBox   ופקד  Button  . WebFormIsPostBack.aspx
טיפול באירועים Page.IsPostBack  –  המשך באירוע  Page_Load   מאתחלים את הפקד בערכים הבאים : private void Page_Load(object sender, System.EventArgs e) { ListBox1.Items.Add(&quot;Shoshana&quot;); ListBox1.Items.Add(&quot;Zelda&quot;); ListBox1.Items.Add(&quot;Yerachmiel&quot;); ListBox1.Items.Add(&quot;Zrubavel&quot;); } בכל לחיצה על הלחצן  Button   הדף נשלח חזרה לשרת .
טיפול באירועים Page.IsPostBack  –  המשך בבקשה הראשונה של הדף יוצגו  בפקד הערכים הבאים : בבקשה השניה של הדף יוצגו  בפקד הערכים הבאים :
טיפול באירועים Page.IsPostBack  –  המשך תופעה זו מתרחשת משום שבכל בקשה מתרחש האירוע  Load   אשר מוסיף לפקד את רשימת הערכים . על מנת להימנע מכך נוסיף את המאפיין  Page.IsPostBack : private void Page_Load(object sender, System.EventArgs e) { if(!Page.IsPostBack) { ListBox1.Items.Add(&quot;Shoshana&quot;); ListBox1.Items.Add(&quot;Zelda&quot;); ListBox1.Items.Add(&quot;Yerachmiel&quot;); ListBox1.Items.Add(&quot;Zrubavel&quot;); } }
טיפול באירועים אירועי פקדים הפיתוח ב -  ASP.NET   הוא  Event Driven  . אירועים מתרחשים כתגובה לפעילות משתמשים על הפקדים . כדוגמה :  לחיצה על כפתור ,  שינוי תוכן תיבת הטקסט ,  בחירת פריט מתוך תיבה משולבת וכו ... . כל אירוע ניתן לקשר למתודה המבוצעת בעת התרחשות האירוע ,  המתודות המטפלות באירועי פקדים מכונות  Event handler . המתודות הללו מוגדרת בקובץ ה -  Code Behind   ומורצות רק  בשרת . לדוגמה : private void Button1_Click(object sender, System.EventArgs e) { }
טיפול באירועים אירועי פקדים  -  המשך למתודות  Event handler   יש מבנה דומה . הכותרת מורכבת משם הפקד והאירוע שהתרחש ,  לדוגמה : Button1_Click, ListBox1_SelectedIndexChanged, TextBox1_TextChanged המתודות יקבלו שני פרמטרים : System.EventArgs e  ,  object sender sender  -  מציין איזה פקד יצר את האירוע . e   -  מכיל מידע נוסף לצורך הטיפול באירוע .
טיפול באירועים אירועי פקדים  -  המשך לכל פקד מציג מספר אירועים ,  את האירועים שהפקדים מציגים ניתן  לראות בחלון של מאפייני הפקד  ( Properties Window ). כדי לראות את האירועים נלחץ על תווית ה -  Events  ( צורה של ברק בצבע צהוב ) רשימת האירועים של הפקד  Button  :
טיפול באירועים אירועי פקדים  -  המשך אירועי הפקדים מתבצעים רק בשרת . לכל פקדי השרת מוגדרים מספר אירועים בנוסף לחמשת האירועים שהם יורשים מהמחלקה  Control  : Init Load PreRender Unload DataBinding
טיפול באירועים אירועי פקדים  -  המשך האירועים מתרחשים בדפדפן הלקוח ומטופלים בשרת . לקוח שרת אירוע event handler הודעת אירוע תגובה
טיפול באירועים אירועי פקדים  -  המשך קישור האירוע עם הקוד שמתרחש בשרת כתגובה לאירוע מתבצע באמצעות delegates  .  ה - delegates   הוא אובייקט המכיל מצביעים למתודות . Visual Studio.NET   מבצע בעצמו את תהליך הקישור בין אירוע הפקד לבין הקוד המטפל בו בצד שרת .  דוגמה :  קישור בין האירוע  Page.Load   ו -  Button.Click   לבין המתודות המטפלות בהן  ( Event Handlers ). this.Button1.Click += new System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load);
טיפול באירועים אירועי המערכת ב -  Global.ASAX Global.aspx   הוא קובץ טקסט המכיל מידע גלובלי על האפליקציה . תפקידו העיקרי הוא הטיפול בשגרות האירועים של האפליקציה כמו למשל התחלה וסיום שיחה  Session   והתחלה וסיום האפליקציה . אפשר להגדיר ולאתחל בו משתנים ,  אובייקטים ושגרות אירועים . הוא אופציונאלי ,  אי הגדרתו מאלצת את האפליקציה להשתמש בהגדרות הסטנדרטיות שלה .
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך נועד בעיקר לטיפול באירועי  Session   ו -  Application . קובץ זה מקומפל ביחד עם קבצי ה -  Code Behind   ל -  dll ,  אי אפשר להפעיל אותו ישירות מהדפדפן . Global.aspx   מאפשר שליטה על אירועים שהתרחשו ברמת האפליקציה ולא ברמת הדף . קובץ זה זמין לכל הדפים באפליקציה ,  לכן כל שינוי בו מחייב אתחול מחדש של האפליקציה .  האתחול מתבצע ברקע בלי שהמשתמש ירגיש .
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך האירועים החשובים של  Global.ASAX תיאור האירוע מתרחש פעם אחת בעת הפעלת אפליקציית  ASP.NET . Application_Start() מתרחש פעם אחת בעת סיום אפליקציית  ASP.NET . Application_End() מתרחש בכל פעם ש -  Session  חדש מתחיל  ( בעת הבקשה ראשונה של הלקוח  -  HTTP Request ).  Session_Start() מתרחש בכל פעם ש -  Session  מסתיים  ( למשל כאשר הלקוח סוגר את הדפדפן ). Session_End()
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך דוגמה : מעקב אחר מספר הגולשים באתר . בדוגמה נשתמש באירועי המערכת הבאים :  Application_Start ,  Session_Start   ו -  Session_End . יש להוסיף את הקובץ לפרויקט  Add->New Item . 1 -  נגדיר ב -  Global.asax   משתנה סטטי מסוג  int   שימנה את מספר המבקרים באתר :  protected static int activeUsers; WebFormGlobalAsax.aspx
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך דוגמה – המשך : 2 -  נגדיר מאפיין שיחזיר לנו את מספר המבקרים לצורך הצגתם בטופס האינטרנט בעת הצורך .  מספר המבקרים מאוחסן במשתנה  activeUsers   שהגדרנו קודם . Public static int ActiveUsers { get   {  return activeUsers;  } }
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך דוגמה – המשך  : 3 -   באירוע  Application_Start  ( מתרחש כאשר האפליקציה מתחילה ),  נאתחל את מספר המבקרים ל - 0. כמובן שאפשר להוסיף הגדרות אחרות כמו למשל מספר המבקרים ביום אחד או מספר הביקורים בכל הדפים או כל הגדרה נחוצה אחרת . protected void Application_Start(Object sender, EventArgs e) { activeUsers = 0; }
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך דוגמה – המשך  : 4-  באירוע  Session_Start ,  כלומר בעת כניסת הלקוח לאתר נעלה את המונה באחד . כדי לחסום את הגישה לאירוע למשתמש בודד בכל פעם נשתמש במתודות  Application.Lock ()  ו -  Application.UnLock () .  חשוב לעשות זאת כדי למנוע התנגשויות בעת הכניסה של יותר ממשתמש אחד בו בעת . protected void Session_Start(Object sender, EventArgs e) { Application.Lock();  activeUsers  ++ ; Application.UnLock();  }
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך דוגמה – המשך  : 5 -   באירוע  Session_End ,  כלומר בעת שהלקוח עוזב את האתר נחסיר מהמונה אחד . נשתמש במתודות  Application.Lock()   ו '  Application.UnLock()   מאותן סיבות שהזכרנו קודם . protected void Session_End(Object sender, EventArgs e) { Application.Lock();  activeUsers --; Application.UnLock();  }
טיפול באירועים אירועי המערכת ב Global.ASAX  -  המשך דוגמה – המשך  : 6 –  על מנת לצפות במספר המשתמשים נוסיף את הקוד הבא לאחד מדפי ה -  aspx  : private void Page_Load(object sender, System.EventArgs e) { this.LabelUsersCounter.Text =  Global.ActiveUsers.ToString(); }
מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
Web.Config קובץ הקונפיגורציה הינו קובץ טקסט בפורמט  XML   סטנדרטי שמכיל את הגדרות התצורה של האפליקציה . אחד החידושים ב -  ASP.NET . אפשר לתעד את התוכן שלו : <!--  תיעוד   --> אפשר לפתוח ולעדכן את הקובץ בכל עורך טקסט רגיל . יכול לשמור הגדרות לדף בודד , לתיקיה שלמה או לכל האפליקציה . הוא אופציונלי ולא חייב להימצא באפליקציה .
Web.Config קובץ הקונפיגורציה ממוקם בתיקיית השורש של האפליקציה .  אפשר ליצור מספר קבצי קונפיגורציה באפליקציה אחת ,  אבל בתיקיות שונות .
Web.Config דוגמא פשוטה לקובץ  Web.Config . <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?> <configuration> <system.web> <authentication mode=&quot;Forms&quot;> <forms name=&quot;appNameAuth&quot;  loginUrl=&quot;login.aspx&quot; timeout=&quot;20&quot;> </forms> </authentication> <authorization> <deny users=&quot;?&quot; />  </authorization> </system.web> </configuration>
Web.Config קובץ קונפיגורציה ,  מדוע ? תסריט ,  יישום  ASP.NET   נעזר במסד נתונים  Access   על מנת לקרוא ולשמור נתונים . על מנת לעבוד עם מסד הנתונים יש להגדיר מחרוזת חיבור  ( Connection String ),  מחרוזת החיבור הוגדרה בקוד ,  הפרוייקט קומפל והותקן בספרייה וירטואלית בשרת אינטרנט . עברו חלפו הימים  ,  האתר נעשה פופולארי ומסד הנתונים לא מצליח לעמוד בקצב ,  יש להחליפו במסד נתונים חזק יותר כמו  SQL Server  . מחרוזת החיבור של  SQL Server   שונה משל  Access   ולכן נאלצנו לחזור לקוד המקור לשנות את מחרוזת החיבור  ,  לקמפל מחדש ולהתקין מחדש את היישום בשרת האינטרנט .
Web.Config קובץ קונפיגורציה ,  מדוע ? הפיתרון . על מנת למנוע את הטרחה המרובה הזו נגדיר את מחרוזת החיבור בקובץ טקסטואלי חיצוני , התוכנית יכולה בכל עת  לגשת לקובץ ,  לקרוא ולהשתמש בהגדרות הנשמרות בו . במידה ויוחלף מסד הנתונים ,  השינוי יהיה בקובץ  הקונפיגורציה בלבד ללא צורך בקומפילציה והתקנה  מחודשת .
Web.Config תוכן הקובץ מאפשר שמירת מאפייני האפליקציה ע &quot; י המאפיין  appSettings  ,  עליו נדבר בהמשך  .  לדוגמה :  מחרוזת החיבור  ( ConnectionString ) .  אפשר לשמור את נתוני משתמשי המערכת  ( אם מספרם קטן )  באמצעות האלמנט  credential . אבטחה  ( Security ):  במקום לכתוב קוד בכל דף מאובטח ,  אפשר לעשות זאת בקובץ .  ניתן לאבטח תיקיות ואפילו האתר כולו . <location path=&quot;admin&quot;>  <system.web>  <authorization> <deny users=&quot;?&quot; /> </authorization> </system.web> </location>
Web.Config תוכן הקובץ – המשך דפי שגיאה מותאמים אישית   :  שגיאה באתר עלולה להציג מידע רגיש ,  שלא נרצה שהמשתמש יראה .  לכן עדיף להוביל את המשתמש בעת הופעת השגיאה לדף שגיאות אישי משלנו . טיפול בגלובליזציה  ( Globalization ):  קובץ הקונפיגורציה מאפשר טיפול בתאריכים ,  שפות ולאומים שונים .  דוגמא לעבודה עם התאריך והשפה העברית : <customErrors mode=&quot;On&quot; > <error statusCode=&quot;404&quot; redirect=&quot;PageNotFoundError.aspx&quot;/> <error statusCode=&quot;500&quot; redirect=&quot;MyAppCustError.aspx&quot;/> </customErrors> <globalization  requestEncoding=windows-1255 responseEncoding=windows-1255  culture=he-il  />
Web.Config תוכן הקובץ – המשך טיפול ב -  Session ,  זמן הפקיעה של האובייקט מוגדר  20  דקות כברירת המחדל ,  אפשר לשנות הגדרה זו  ע &quot; י שינוי המאפיין  timeout . אפשר להגביל את גודל הקבצים שנשלחים ע &quot; י המשתמש ואת משך הזמן לקבלתם .  וכך נוכל למנוע מהמשתמשים בעלי כוונות זדוניות מלהפציץ את האתר בקבצים .  ערך ברירת המחדל הוא  4mb  . <configuration> <system.web> <sessionState timeout=&quot;15&quot; /> </system.web> </configuration> <httpRuntime maxRequestLength=&quot;1100&quot;  executionTimeout=&quot;90&quot;/>
Web.Config שמירת מידע לקובץ קונפיגורציה אחד הדרכים לשמירת מידע בקובץ הקונפיגורציה היא באמצעות האלמנט  appSetting  המאפשר לשמור מידע מותאם אישית . האלמנט  appSetting>  >  מוגדר באמצעות זוג מפתח - ערך   ( key-value )  התכונה הראשונה תשמש כמפתח ראשי והשניה תציב ערך לאותו מפתח .  באמצעות המפתח נוכל לגשת לערך שלו מכל דף באפליקציה .
Web.Config שמירת מידע לקובץ קונפיגורציה – המשך דוגמא לשמירת ערך בקובץ הקונפיגורציה  : <appSettings> <add key=&quot;fName&quot; value=&quot;MyFirstName&quot;/> <add key=&quot;lName&quot; value=&quot;MyLastName&quot;/> <add key=&quot;conString&quot;  value=&quot;Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\\inetpub\\wwwroot\\Testguatda.com/cmx.p\\MyDB.mdb&quot; /> </appSettings>
Web.Config קריאת מידע מקובץ קונפיגורציה כדי לקרוא מידע מקובץ הקונפיגורציה ,  צריכים להוסיף את מרחב השמות  ( namespace )  System.Configuration .  המחלקה  ConfigurationSettings   ששייכת למרחב השמות הנ &quot; ל מכילה מאפיין בשם  AppSettings  ,  מאפיין זה יודע לפנות לקובץ הקונפיגורציה ולקרוא ערכים : דוגמה :  ConfigurationSettings.AppSettings[“ המפתח &quot;]; המפתח שיצרנו בקובץ  Web.config txtFName.Text=ConfigurationSettings.AppSettings[&quot;fName&quot;]; txtLName.Text=ConfigurationSettings.AppSettings[&quot;lName&quot;];
Web.Config הקשר היררכי בין קבצי קונפיגורציה ברמת השרת  ( IIS )  מוגדר קובץ קונפיגורציה הנקרא  machine.config  , קובץ זה מותקן בעת התקנת  .NET Framework   ומכיל הגדרות גלובאליות המשותפות לכל יישומי  ASP.NET   המותקנות השרת . קובץ הקונפיגורציה  Web.Config   מקבל את הגדרות ברירת המחדל שלו מ -  Machine.Config  . במידה ובאפליקציה לא מוגדר  Web.Config ,  היישום מקבל את ההגדרות ישירות מ -  Machine.Config  . במידה וביישום מוגדר  Web.Config   הוא יהיה זמין ליישום ולכל היישומים בתת הספריות . SubDir RootDir SubDir web.config זמין גם לתקיות אלה
Web.Config הקשר היררכי בין קבצי קונפיגורציה  -  המשך קובץ קונפיגורציה דורס את ההגדרות הקיימות בקובץ הקונפיגורציה הנמצא בספריה שמעליו ,  וקובץ הקונפיגורציה בספריית השורש דורס את ההגדרות המוגדרות ב -  Machine.Config  . IIS Web Server wwwroot Sub Dir machine.config Web.Config Web.Config
מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
פקדים סוגי פקדי שרת   Server Controls  HTML SERVER CONTROLS   -  פקדים זהים לפקדי  HTML   רגילים  , אך נותנים את היכולות של  ASP.NET   על - ידי תוספת פשוטה לפקד  : runat=“server” משתמשים בשיטה זו בעיקר כדי להמיר במהירות דפי  HTML   לעבודה עם טכנולוגיית  NET . WEB SERVER CONTROLS  –  פקדי שרת VALIDATION CONTROLS  –  פקדי אימות - USER CONTROLS פקדי משתמש
פקדים פקדי שרת  Html Server Controls Html Controls   או פקדי  HTML   הם קבוצה של פקדים בסיסיים שנתמכים ע &quot; י שפת  HTML ,  לדוגמה  :  Input ,  Textarea, Options   וכו '. הם פשוטים ולא דורשים משאבים גדולים במיוחד . כברירת מחדל פקדים אלו פועלים רק בצד הלקוח  ( Client Side ). ניתן להפוך אותם גם לפקדי צד השרת  ( HTML Server control ). כפקדי צד שרת ניתן לעבוד עימם גם בצד לקוח וגם בצד שרת .
פקדים פקדי שרת  Html Server Controls   –  המשך על מנת להפוך פקד  HTML   רגיל לפקד שרת יש ללחוץ על הפקד עם הלחצן הימני בעכבר ,  מהתפריט בוחרים באפשרות  Run as Server Control .   או לחילופין להוסיף את המאפיין  runat=&quot;server&quot;   להגדרת  הפקד בדף ה -  HTML  . Html Control : <input type=&quot;text&quot;> Html Server Controls <input type=&quot;text&quot; runat=“server”>
פקדים פקדי שרת  Html Server Controls   –  המשך מכילים את כל התכונות של פקדי  HTML   ובנוסף יש להם את יכולת העבודה בשיטה המונחית עצמים . תומכים במנגנון התכנות המונחה אירועים  ( הן בצד לקוח והן בצד שרת ). פקדים אלו נמצאים תחת מרחב השמות  ( namespace )  System.Web.UI.HtmlControls .
פקדים פקדי שרת  Web Server Controls סידרה של פקדים שפותחו במיוחד לעבודה בסביבת  ASP.NET  , מכונים גם  Controls  ASP.NET Web Form  . לפקדים יש מאפיינים ,  אירועים ומתודות שאפשר לעבוד איתם בזמן הריצה . לפני כל פקד מסוג זה נמצא את התגית  :  <asp:>  פקדים אלו נמצאים תחת מרחב השמות  ( namespace )  System.Web.UI.WebControls לא מוכרים על ידי הדפדפנים  ,  אלא מתורגמים לפקדי  HTML   רגילים ,  השרת מייצר עבורם קוד שתלוי בדפדפן שביקש את הדף . .
פקדים פקדי שרת  Web Server Controls כולם יורשים מאותה מחלקה ,  ולכן יש להם  מאפיינים משותפים ,  כמו  width, Height, BackColor   וכו ' פקדי  HTML   מסורתיים הם  stateless  –  חוזרים להגדרות ברירת מחדל ,  בעוד שעבור פקדי שרת מצב התצוגה וקלט המשתמשים נשמרים אוטומטית באמצעות אובייקט הנקרא  ViewState  . חייבים להיות מוגדרים כ - &quot;  runat = server ” ,  אחרת לא יפעלו . אירועים מורצים רק בצד השרת ,  לא מוכרים בצד לקוח . מכילים אוסף של פקדים מיוחדים שלא קיימים ב -  HTML  ,  כגון :  Calendar ,  DataGrid ,  AdRotator ,  ImageButton   וכו '  .
פקדים פקדי שרת השוואה בין סוגי הפקדים . תיבת טקסט כ -  Html Control : <input type=&quot;text“ /> תיבת טקסט כ -  HTML Server Control  : <input type=&quot;text“ id=“mytext” runat=“server” /> תיבת טקסט כ -  Web Server Control  : <asp:TexBox id=“mytext” runat=“server” />
פקדים פקדי שרת השוואה בין סוגי הפקדים . בעורך הגראפי  Html Control   ו - Web Server Control   נראים אותו דבר למעט של -  Web Server Control   נוסף חץ ירוק קטן בפינה השמאלית העליונה .  ב  2005 VS   ב  VS2008   שם הפקד מתחיל באות גדולה Web Server Control Html Control
פקדים הפקדים הסטנדרטיים -  TextBox   תפקידו לאפשר קבלת קלט מהמשתמש . משמש גם להצגת נתונים ,  אם כי לשימוש זה יש תחליפים . המשתמש יכול לערוך את הטקסט ,  להעתיק ,  להדביק ,  לגזור או לבחור טקסט שבתוך הפקד . אפשר למנוע את העריכה של הטקסט ע &quot; י שינוי ערך המאפיין  ReadOnly   ל -  true . כברירת המחדל של  TextBox   אפשר להכניס עד  2048  תווים ,  ניתן להגביל מספר תווים זה לפחות  ( MaxLength )  או להגדילו עד  32 KB   של טקסט  ( MultiLine   TextMode = ).
פקדים הפקדים הסטנדרטיים -  TextBox -  המשך דוגמא ל -  TextBox   בעורך הגראפי : בעורך ה -  HTML   : <asp:TextBox  id=&quot;TextBox1“ runat=&quot;server&quot;> TextBox </asp:TextBox> בדפדפן  : > input name=&quot;TextBox1&quot; type=&quot;text&quot; id=&quot;TextBox1”/>
פקדים הפקדים הסטנדרטיים -  TextBox  -  המשך מאפיינים חשובים מאפיין צבע הרקע Backcolor סוג הגופן Font גובה  הפקד Height מספר התווים המקסימאלי שהפקד יכול לקבל MaxLength למניעת העריכה ReadOnly הטקסט שמופיע מעל הפקד Text  הצורה בה יוצג הטקסט TextMode הצגה או הסתרה של הפקד Visible רוחב הפקד Width
פקדים הפקדים הסטנדרטיים  –   Label הדרך הפשוטה ביותר להוספת טקסט סטטי לטופס היא להוסיפו בין תגיות ה  Body   של דף האינטרנט . החיסרון הוא שלא ניתן לשנות את הטקסט בזמן הריצה ,  הפקד  Label   בא לפתור מגבלה זו . פקד זה משמש ככותרת או כתיאור קצר של המידע  שבטופס . להבדיל מטקסט סטטי בדף ,  ב -  Label   ניתן לשנות את הטקסט באמצעות המאפיינים של הפקד . המשתמש אינו יכול לשנות ישירות את הטקסט שלו .
פקדים הפקדים הסטנדרטיים  –   Label  –  המשך דוגמה ל -  Label   בעורך הגראפי : בעורך ה -  HTML   : <asp:Label   id=&quot;Label1&quot; runat=&quot;server&quot;>Label</asp:Label> בדפדפן : <span id=&quot;Label1&quot;>Label</span>
פקדים הפקדים הסטנדרטיים  –   Label  –  המשך מאפיינים חשובים תיאור מאפיין צבע הרקע Backcolor סוג המסגרת BorderStyle עובה המסגרת BorderWidth סוג הגופן Font צבע הטקסט  ForeColor גובה  הפקד Height הטקסט שמופיע מעל הפקד Text הצגה או הסתרה של הפקד Visible רוחב הפקד Width
פקדים הפקדים הסטנדרטיים  –   Button   פקד פקודה ,  הקלקה על פקד זה פירושה  &quot; ריצה &quot;  מיידית לשרת  ( Postback ) . בשרת יופעל אירוע שהוגדר מראש .
פקדים הפקדים הסטנדרטיים  –   Button  –  המשך דוגמא לשימוש בעורך הגראפי : בדף  HTML  : <asp:Button id=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;Button&quot;> </asp:Button> בדפדפן : <input type=&quot;submit&quot; name=&quot;Button1&quot; value=&quot;Button&quot; id=&quot;Button1&quot; />
פקדים הפקדים הסטנדרטיים  –   Button  –  המשך מאפיינים חשובים תיאור מאפיין צבע הרקע Backcolor סוג המסגרת BorderStyle עובי המסגרת BorderWidth מעביר ערך זה בעת אירוע הלחיצה CommandName העברת מידע נוסף בעת אירוע הלחיצה CommandArgument גובה  הפקד Height הטקסט שמופיע מעל הפקד Text הצגה או הסתרה של הפקד Visible רוחב הפקד Width
פקדים פקדי רשימה –  DropDownList   מאפשר בחירה של פריט אחד מתוך רשימה של פריטים המוגדרים מראש . רשימת הפריטים מוסתרת עד ללחיצה על הפקד . בלחיצה על הפקד הרשימה נגלית וניתן לבחור פריט אחד . שימושי כאשר צריכים לאפשר למשתמש בחירה של ערך מתוך סדרת ערכים תוך חיסכון בשטח תצוגה . הוספת הפריטים לפקד יכולה להתבצע בזמן עיצוב או בזמן ריצה : בזמן העיצוב :  באמצעות המאפיין  Items   של הפקד . בזמן הריצה :  באמצעות המתודה  Add .
פקדים פקדי רשימה –  DropDownList  -  המשך מצב סגור : מצב פתוח :
פקדים פקדי רשימה –  DropDownList  -  המשך מאפיינים חשובים תיאור מאפיין האם לשלוח את הטופס לשרת אחרי בחירת פריט מהרשימה AutoPostBack DataSet  איבר של מקור הנתונים למשל טבלה מה  DataMember DataSet   מקור הנתונים למשל  DataSource למשל השדה של הטבלה  DataTextField ערך של שדה הנתונים DataValueField אוסף הפריטים של הפקד Items המספר הסידורי של הפריט שנבחר SelectedIndex מאפשר בחירה של ערך אחד או יותר מפריטי הרשימה SelectionMode ערך הפריט הנבחר SelectedValue
פקדים פקדי רשימה –  ListBox   מאפשר בחירה של פריט אחד או יותר מתוך רשימה של פריטים המוגדרים מראש . רשימת הפריטים גלויה כל הזמן . שימושי כאשר צריכים לאפשר למשתמש בחירה של ערך אחד או יותר מתוך סידרת ערכים .  הוספת הפריטים לפקד יכולה להתבצע בזמן עיצוב או בזמן ריצה : בזמן העיצוב :  באמצעות המאפיין  Items   של הפקד . בזמן הריצה :  באמצעות המתודה  Add.
פקדים פקדי רשימה –  ListBox  -  המשך מאפיינים חשובים תיאור מאפיין האם לשלוח את הטופס לשרת אחרי בחירת פריט מהרשימה AutoPostBack DataSet  איבר של מקור הנתונים למשל טבלה מה '  DataMember DataSet   מקור הנתונים למשל  DataSource למשל השדה של הטבלה  DataTextField ערך של שדה הנתונים DataValueField אוסף הפריטים של הפקד Items המספר הסידורי של הפריט שנבחר SelectedIndex מאפשר בחירה של ערך אחד או יותר מפריטי הרשימה SelectionMode ערך הפריט הנבחר SelectedValue
פקדים המאפיין  AutoPostBack   כברירת מחדל הטופס חוזר לשרת  ( Postback )  רק כאשר המשתמש לוחץ על  Button  . בפקדים  ListBox, DropDownBox   מוגדר האירוע  SelectedIndexChanged   המופעל כאשר המשתמש בוחר ערך מתוך רשימת ערכים ,  בפקד  TextBox   מוגדר האירוע  TextChanged   המופעל כאשר הפקד מאבד פוקוס לאחר שהמשתמש  הקליד בו דבר מה . כברירת מחדל ,  שלושת אירועים אלו נשמרים בצד לקוח עד שהמשתמש מקליק על  Button  . בהקלקה הטופס נשלח לשרת ושם מבוצעים כל אותם אירועים . האירועים מבוצעים על פי סדר הוספת הפקדים לטופס בזמן עיצוב .
פקדים המאפיין  AutoPostBack  –  המשך לדוגמה : נציב בטופס את הפקדים הבאים על פי הסדר  :  DropDownList, ListBox.  ו -  TextBox  . נוסיף עוד פקד  Button   שתפקידו לשלוח את הטופס  לשרת ,  ועוד פקד  ListBox   בו נרשום את האירועים  שהתרחשו בטופס . WebFormControls.aspx
פקדים המאפיין  AutoPostBack  –  המשך הטיפול באירועים : private void Button1_Click( . . . ) { lstEventList.Items.Add(&quot;Button1_Click&quot;);   } private void ListBox1_SelectedIndexChanged( . . . ) { lstEventList.Items.Add(&quot;ListBox1_SelectedIndexChanged&quot;); } private void TextBox1_TextChanged( . . . ) { lstEventList.Items.Add(&quot;TextBox1_TextChanged&quot;); } private void DropDownList1_SelectedIndexChanged( . . . ) { lstEventList.Items.Add(&quot;DropDownList1_SelectedIndexChanged&quot;); }
פקדים המאפיין  AutoPostBack  –  המשך דוגמה – המשך  : מריצים את האפליקציה ,  בוחרים ערכים ל -  ListBox, DropDownList   ול -  TextBox  ,  מקליקים על ה -  Button  ,  הטופס מורץ לשרת  ,  והתוצאה המתקבלת היא  :
פקדים המאפיין  AutoPostBack  –  המשך לעיתים נרצה לבצע  &quot; ריצה &quot;  מיידית לשרת כאשר המשתמש בוחר ערך מפקדי  DropDownList  ,  ListBox   או מקליד מידע  ב -  TextBox . כדי שפקדים אלו יבצעו  Postback  ,  יש להגדיר את המאפיין  AutoPostBack   כשווה  true  . כאשר  AutoPostBack=true   הפקד  &quot; רץ &quot;  לשרת מבלי לחכות ל - Button.Click  .
פקדים המאפיין  AutoPostBack  –  המשך דוגמה – המשך  : משנים לפקדים  ListBox1, DropDownList   ול -  TextBox   את המאפיין  AutoPostBack   ל -  true  . ומריצים פעם נוספת .
פקדים המאפיין  AutoPostBack  –  המשך דוגמה – המשך  : בחירת ערך ב -  ListBox בחירת ערך ב -  DropDownList בחירת ערך ב -  TextBox
פקדים פקדי בחירה  -  CheckBox מאפשר למשתמש אפשרות בחירה באחד משני מצבים :  true   או  false  .  סימון הפקד מציין  true ,  ואי סימונו מציין  false  . ערך ברירת המחדל של המאפיין  Checked   הוא  false . לעיתים קרובות משתמשים בפקד זה כאשר נדרש לאפשר למשתמש אפשרויות בחירה רבות ,  או המשתמש צריך לענות על שאלה שהתשובה שלה היא כן או לא בלבד . בכל לחיצה על הפקד ערך המאפיין  Checked   מתחלף . גם לפקד זה מוגדר המאפיין  AutoPostBack  . WebFormCheckBox.aspx
פקדים פקדי בחירה –  CheckBox  -  המשך דוגמה ל -  CheckBox   בעורך הגראפי : בעורך ה -  HTML   : <asp:CheckBox id=&quot;CheckBox1&quot; runat=&quot;server&quot;></asp:CheckBox> בדפדפן : <input id=&quot;CheckBox1&quot; type=&quot;checkbox&quot; name=&quot;CheckBox1&quot; />
פקדים פקדי בחירה –  CheckBox  –  המשך מאפיינים חשובים : תיאור מאפיין צבע הרקע Backcolor סימון / אי סימון של הפקד Checked סוג הגופן Font צבע הטקסט  ForeColor גובה  הפקד Height הטקסט שמופיע מעל הפקד Text הצגת הטקסט מימין או משמאל לפקד TextAlign הצגה או הסתרה של הפקד Visible רוחב הפקד Width
פקדים פקדי בחירה –  RadioButton   מאפשר למשתמש לבחור באפשרות אחת בלבד מבין מספר אפשרויות . פקדי  RadioButtons   מוגדרים בקבוצות ,  כל פקד בקבוצה מגדיר אפשרות אחת לבחירה . כאשר בוחרים  RadioButton   אחד מתוך הקבוצה ,  הוא מקבל את הערך  true   וכל שאר הפקדים את הערך  false . גם לפקד זה מוגדר המאפיין  AutoPostBack .
פקדים פקדי בחירה –  RadioButton   -  המשך דוגמה ל -  RadioButton   בעורך הגראפי : בעורך ה -  HTML  : <asp:RadioButton id=&quot;RadioButton1&quot; runat=&quot;server&quot;> </asp:RadioButton> בדפדפן : <input id=&quot;RadioButton1&quot; type=&quot;radio&quot; name=&quot;RadioButton1&quot; value=&quot;RadioButton1&quot; />
פקדים פקדי בחירה –  RadioButton   -  המשך מאפיינים חשובים תיאור מאפיין צבע הרקע Backcolor סימון  \  אי סימון של הפקד Checked סוג הגופן Font צבע הטקסט  ForeColor גובה  הפקד Height הטקסט שמופיע מעל הפקד Text הצגת הטקסט מימין או משמאל לפקד TextAlign הצגה או הסתרה של הפקד Visible רוחב הפקד Width
תרגול תרגיל  1 -  הצגת תאריך מטרת התרגיל להראות שתי אפשרויות להצגת תאריך . שימוש בפקד  תאריך  Calendar   -  בדרך כלל שהתאריך הנבחר הוא בתקופה הקרובה  ,  אם התאריך לא בטווח הקרוב נשתמש ב  3  פקדים  :  שנה  ,  חודש  ,  יום  . שימוש בפקד  תאריך  Calendar הוסף פקד  תאריך  Calendar   ותווית  . בעת לחיצה על התאריך הנבחר הצג את התאריך בתווית . שימוש בפקדי רשימה לקליטת  תאריך  לידה . הוסף  3  פקדי רשימה שנה  ,  חודש  ,  יום  ותווית להצגת החודש הנבחר . לפקד השנה אכלס את הנתונים בעת העלאת הטופס  ,  כתוב מתודה מתאימה והפעל אותה בעת העלאת הטופס . לפקד החודש אכלס את  12  החודשים בזמן עיצוב . פקד יום  ,  מספר הימים יוכנסו לפקד לאחר בחירת השנה והחודש  ,  בהתאם למספר הימים לפי החודש הנבחר . לאחר בחירת התאריך הצג בתווית את  תאריך לידה  .  
תרגול תרגיל  2 -  טופס רישום  בנה טופס רישום שיכיל את הפרטים הבאים  :  שם פרטי . שם משפחה . תעודת זהות  . מין  בחירה בין זכר / נקבה . תאריך לידה  . ארץ לידה  ( DropDownList ) .  שנת עליה  -  יתווסף לטופס אם המשתמש לא נולד בארץ . מצב משפחתי בחירה מרשימה רווק / נשוי / גרוש / אלמן . רחוב . עיר בחירה מרשימת ערים . כתובת דוא &quot; ל . טלפון  טלפון נייד . שם משתמש  . סיסמא  אימות סיסמא הוסף לחצן אימות פרטים שיציג בתווית את כל הנתונים שנקלטו בטופס . הוסף לחצן  &quot; שלח &quot;  ,  בעת הלחיצה ישמרו השם הפרטי והמשפחה  ב  Session  ויעביר לדף חדש שיציג את הברכה שלום ופרטי המשתמש  .
פקדי אימות פקדי אימות קלט משתמש אימות קלט משתמש  ( Validating User Input )  הנו תהליך הבודק האם מידע שהמשתמש הקליד בטופס מתאים לערך הנדרש ,  לטווח ערכים מוגדר או לתבנית קלט כלשהיא .  אימות קלט משתמש מתבצע על ידי השוואה בין קלט מהמשתמש אל מול תבנית קלט נדרשת אשר נקבעה מראש .  תבניות הקלט שנקבעו מראש יכולות להגדיר מספר תווים חוקי ,  שימוש בתווים מסוימים ,  טווח ערכים לערך שהוקלד או נוסחא מתמטית . לדוגמא :  שדה הקולט כתובת  EMail   אמורה להיות במבנה מוגדר וחוקי  . מספר טלפון חייב להכיל רק ספרות ומספר מוגדר וידוע מראש של ספרות .
פקדי אימות פקדי אימות קלט משתמש בדיקת החוקיות מתבצעת גם בצד לקוח וגם בצד שרת על פי תרשים הזרימה הנ &quot; ל :   התהליך  : קלט המשתמש נבדק בצד לקוח ,  במידה והקלט אינו תואם לתבנית שהוגדרה מראש ,  שליחת הטופס לשרת תבוטל ויוצגו סמלי שגיאה .  במידה והקלט תואם את התבנית ,  שליחת הטופס לשרת לא תתעכב . בשרת מתבצעת בדיקה נוספת של הקלט . במידה והקלט אינו תואם לתבנית שהוגדרה מראש ,  עיבוד הטופס בשרת יבוטל והוא יוחזר ללקוח לתיקון הטעויות . במידה והקלט אומת ,  השרת יוכל לעבד את הבקשה . 1 2 3 4 5 6
פקדי אימות פקדי אימות קלט משתמש אימות קלט משתמש מגן על היישום מפני  2  סכנות עיקריות : Spoofing  –  מתרחש כאשר משתמש מנטרל סקריפטים לולידציה בצד הלקוח  ( ע &quot; י נטרול קוד בצד הלקוח שמתבמע בעזרת שינוי הדגרות הדפדפן ).  ב -  ASP.NET   ולידציה של צד הלקוח מתבצעת תמיד שוב בצד השרת –שם המשתמש לא יכול לשנות או לנטרל קוד . Malicious code  –  מתרחש כאשר משתמש יכול להוסיף טקסט בלתי מוגבל ל -  Web Page   דרך פקדי קלט שאין להם ולידציה .  משתמש יכול לשלוח טקסט עצום שיתקע את השרת או להכניס כל מחרוזת אפשרית שיכולה להיות גם שאילתה ששולפת מידע כלשהו מה -  DB   או הוספת הרשאות או יצירת  Accounts . אימות הקלט מונע  &quot; ריצות &quot;  מיותרות של הטופס לשרת .
פקדי אימות פקדי אימות קלט משתמש בעבר בדיקות תקינות הקלט נכתבו על ידי מפתחי האתר בתסריטים ב -  Java Script  ( בצד לקוח ),  וב -  VB Script  ( בצד שרת ). ב -  ASP.NET   בדיקות תקינות הקלט מתבצעות על ידי פקדי צד שרת . הפקד מבצע גם את הבדיקה בצד לקוח  ,  על ידי שתילת קוד שהוא מחולל ב -  Java Script  ( קוד שמותאם לדפדפן שביקש את הדף ) ,  ובצד שרת באמצעות  C#  ( או כל שפה  . NET   אחרת ). אימות הקלט מתבצע על פי אותה לוגיקה תכנותית גם בצד לקוח וגם בצד שרת . אימות הקלט מתבצע בזמן המעבר מפקד קלט אחד לאחר  , פעולה זו מאפשרת למשתמש לקבל משוב מיידי על הקלט שלו מבלי להמתין לשליחת הטופס לשרת .
פקדי אימות פקדי אימות קלט משתמש  -  הרשימה RequiredFieldValidator  –  בודק האם הוזן ערך כלשהוא בפקד שחייב לקבל ערך . RangeValidator  –  בודק האם ערכו של פקד מסויים נמצא בטווח ערכים מוגדר . RegularExpressionValidator  –  בודק האם מבנה המידע שהוקלד בפקד מתאים לתבנית מוגדרת .  CompareValidator  –  השוואת ערכם של שני פקדים . CustomValidator   –  מאפשר כתיבת קוד בדיקה מותאם אישית . ValidationSummary  –  מציג סיכום של כל שגיאות אימות הקלט בדף .
פקדי אימות פקדי אימות קלט משתמש – הוספת פקד לטופס ההליך הראשוני משותף לכל פקדי אימות הקלט : תהליך הוספת פקד אימות קלט מורכב משלושה שלבים ,  השניים הראשונים זהים לכל פקדי אימות הקלט ,  והשלישי שונה מפקד לפקד . מחלון ארגז הכלים גוררים את הפקד לטופס .  בוחרים את פקד הקלט שאותו רוצים לבדוק ומעדכנים את מאפייני פקד אימות הקלט ,  המאפיין  ControlToValidate   של פקדי אימות הקלט קובע מי הוא הפקד אותו הוא בודק .  מגדירים מאפיינים נוספים בפקד אימות הקלט ,  המאפיינים שונים מפקד לפקד . ניתן לצרף לפקד קלט אחד מס '  פקדי אימות מידע .
פקדי אימות פקדי אימות קלט משתמש – הוספת פקד לטופס דוגמה לפקדי אימות ב -  HTML  : <asp:RequiredFieldValidator ID=&quot;RequiredFieldValidator1“   runat=&quot;server&quot; ControlToValidate=&quot;TextBox1&quot; Display=&quot;Dynamic&quot; ErrorMessage=&quot;Error    Message&quot;>*</asp:RequiredFieldValidator> <asp:RangeValidator ID=&quot;RangeValidator1&quot; runat=&quot;server&quot;    ControlToValidate=&quot;TextBox1&quot; Display=&quot;Dynamic&quot; ErrorMessage=&quot;RangeValidator&quot;  MaximumValue=&quot;100&quot; MinimumValue=&quot;0&quot; Type=&quot;Integer&quot;>R</asp:RangeValidator> פקדי האימות מציגים מחרוזת לשגיאה ,  ולכן מומלץ להציבם בסמוך לפקד אותו הם בודקים .
פקדי אימות פקדי אימות קלט משתמש –   RequiredFieldValidator בודק האם הוזן ערך כלשהוא בפקד שחייב לקבל ערך . האימות לא מתבצע רק לגבי פקד ריק אלא גם על פקד המכיל ערך התחלתי שהמשתמש חייב לשנות . מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage טקסט שאפשר לאמת  ( אופציונאלי ) InitialValue
פקדי אימות פקדי אימות קלט משתמש –  RangeValidator בודק האם ערכו של פקד מסויים נמצא בטווח ערכים מוגדר . הערך יכול להיות מספרי ,  תווי ,  תאריך או מטבע . מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage הערך המקסימאלי לשדה האימות MaximumValue הערך המינימאלי לשדה האימות MinimumValue סוג הנתונים שצריך לאמת Type
פקדי אימות פקדי אימות קלט משתמש –  CompareValidator השוואת ערכם של שני פקדים . כדי להשוות מול ערכו שלקבוע בוחרים במאפיין  ValueToCompare . כדי להשוות לערך שהוזן בפקד אחר בוחרים במאפיין  ControlToCompare . מאפיינים חשובים : תיאור מאפיין שדה ההשוואה ControlToCompare השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage סוג ההשוואה Operator השוואה לקבוע ValueToCompare סוג הנתונים של הבדיקה Type
פקדי אימות פקדי אימות קלט משתמש  -  RegularExpressionValidator בודק האם מבנה המידע שהוקלד בפקד מתאים לתבנית מוגדרת .  פקד זה משווה את התווים ,  הספרות והסימנים שהוקלדו לתבנית מוגדרת ,  לדוגמא :  E-Mail ,  מס '  טלפון ,  מיקוד וכו '. מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage תבנית האימות ValidationExpression
דוגמאות לשימוש בפקדי אימות אם רוצים לבדוק שהשדות  &quot; סיסמא &quot;  ו &quot; אימות סיסמא &quot;  זהים יש להשתמש בפקד  :  CompareValidator . עבור תיבת כתובת  E-MAIL  עלינו לבנות תבנית נכונה כמו למשל  someone@sometime.com  ,  נשתמש בפקד  RegularExpressionValidator   לבצע אימות זה ע &quot; י התבנית : \w+\@\w+\.com  -  או אחת או יותר ולאחריה התו  @  ולאחריו אות אחת או יותר ולבסוף המחרוזת  com .  . w  -  מציין אות  . + -  הופעה אחת או יותר של תו . * -  אפס הופעות  או יותר של תו . ? -  אפס הופעות או להופעה יחידה של  תו .
פקד   RegularExpressionValidator   לאימות ע &quot; י תבנית הכנסת מספר בין  5  ספרות  [0-9]{5}  או  {5} \d הכנסת מספר בין  6  ל -8  ספרות  {6,8} \d הכנסת מספר שלם שמכיל לפחות ספרה אחת  [0-9]+  ניתן לציין תבניות מרובות להתאמה בפקד זה ע &quot; י שימוש בסימן  |  ( or  )  במאפיין  ValidationExpression  ,  לדוגמא המחרוזת הבאה מתאימה לכל מספרי בטלפון הכוללים  9  ספרות וקו הפרדה אחד  ( עבור מספר טלפון )  או מספר טלפון הכולל  9  ספרות עם קו הפרדה  ( עבור מספר טלפון נייד ).  (([0]{1}[2,3,4,8,9]{1}-[0-9]{7}) | ([0]{1}[5]{1}[0,2,4,7]{1}-[0-9]{7})) המשתמש יכול להזין כל אחד מהמספרים הבאים  :  03-4589865 052-458986 שימו לב  !  רק פקד  RequiredFieldValidator  מתייחס לשדה ריק כשדה לא תקין  ,  כל הפקדים האחרים מקבלים שדות ריקים  ,  ז &quot; א שכל שדה חובה יש להוסיף פקד  RequiredFieldValidator  בנוסף לפקדי האימות הנוספים .
פקד   CompareValidator פקד זה משווה את הערך שהוזן לערך קבוע  ,  לערך מאפיין של פקד מסוים . האופרטור  DataTypeCheck  -  בודק אם הנתון הוא מסוג נתונים מסויים  ( string,integer,double  וכד '). ניתן להכניס במאפיין  Type  את הפרמטרים  :  מחרוזות  ,  מספרים שלמים  ,  ערכים בעלי גודל כפול  ,  תאריך  ,  מטבע . כדי להשוות מול ערך קבוע  ,  יש לשנות את המאפיין  ControlToCompare  ל –  ValueToCompare  . אם רוצים לבדוק שהשדות  &quot; סיסמא &quot;  ו &quot; אימות סיסמא &quot;  זהים יש להשתמש בפקד זה .
פקדי אימות פקדי אימות קלט משתמש –  CustomValidator מאפשר כתיבת קוד בדיקה מותאם אישית .  נשתמש בו כאשר נדרש לכתוב קוד אימות קלט מותאם . כאשר אף אחד מפקדי אימות הקלט האחרים אינם מספקים מענה מתאים ,  לדוגמה :  בדיקת ספרת ביקורת של מספר זהות . מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage להפעלת קוד האימות OnServerValidate
דוגמא לפקד    CustomValidator לדוגמא בדיקת תקינות תעודת זהות – ספרת ביקורת  . הוסף פקד  CustomValidator  לחיצה כפולה על הפקד תפתח מתודה  ,  נוסיף את הבדיקה . לפקד  CustomValidator   יתווסף קישור ברשימת האירועים ל -  .serverValidate  בדיקת תקינות  תעודת הזהות  בשקף  הבא
דוגמא לפקד    CustomValidator  בדיקת תקינות תעודת זהות תעודת הזהות מכילה  9  ספרות הכולל  8  ספרות  +  ספרת ביקורת לדוגמא  : 051938991. ספרת הביקורת  ( הימנית ביותר )  היא פונקציה של  8  הספרות  . כיצד מתבצעת הבדיקה  הכפל כל ספרה מ -8  הספרות בצורה הבאה  : 12121212  05193899  אם סכום הספרות מעל  9  סכם את הספרות  ,  סכם את כל הספרות  ,  ספרת הביקורת היא ההשלמה לעשרת הקרובה . 0* 1 +5* 2 +1* 1 +9* 2 +3* 1 +8* 2 +9* 1 +9* 2=0+1+1+ 9 +3+ 7 +9 +9 =39 המספר  39  ולכן ספרת הביקורת היא  1 ( אם סכום הספרות היה  37  ספרת הביקורת היתה  3). בדוק אם מספר תעודת הזהות  022875942  תקין . 9* 2=18=1+8= 9 8* 2=16=1+6= 7
הצגת סיכומי אימות עד כה מיקמנו את הודעות השגיאה מייד לאחר פקדי השרת שאומתו  ,  הדבר שימושי כשרוצים לומר להשתמש איזה פקד מכיל שגיאות ,  במיוחד באימות בצד הלקוח . אך לא תמיד זה המקום האידיאלי למקם הודעות שגיאה  ,  יש מספר אפשרויות למיקום הודעות .
הצגת סיכומי אימות אפשרויות למיקום הודעות שגיאה   In-line  –  באותו מקום בו נמצא פקד האימות בפריסת הדף . Summary  -  כל השגיאות בסיכום נפרד  . - In-line and Summary   הודעות השגיאה המתאימות יכולות  להיות שונות . Customized  –  מעבר על כל הפקדים בלולאה  ( שקופית  12) שיטת הסיכום שימושית כשנרצה למקם את כל הודעות השגיאה במקום אחד   .
פקדי אימות פקדי אימות קלט משתמש –  ValidationSummary   מציג סיכום של כל שגיאות אימות הקלט שנתגלו בדף . על מנת להשתמש בו כל שצריך לעשות הוא רק להציב אותו על הטופס .
פקדי אימות  -  פקד  ValidationSummary   במקום להציג את כל ההודעות במקום אחד  ,  נוכל להשתמש בפקד  ValidationSummary   פקד זה מציג הודעות שגיאה במבנה מוגדר במקום מסויים בדף . פקד זה מלקט את הודעות השגיאה מכל הפקדים האחרים בדף ומציג אותן במקום אחד . ניתן להשתמש ב –  DisplayMode   כדי להציג את ההודעות כרשימת תבליטים ע &quot; י ציון  BulleList   או במבנה פיסקה  Paragraph  Single ההודעות המוצגות בפקד הן אילו המצוינות במאפיין  ErrorMessage   בפקדי האימות  .  כדי לשנות את ההודעה המוצגת במקום  ,  השתמש במאפיין  Text  . אם אינך רוצה להציג  את הודעות השגיאה במקום  ,  שנה את המאפיין  Display   בפקד ל –  none
הצגת הודעות שגיאות בתיבת דו - שיח ע &quot; י הוספת המאפיין  ShowMessageBox   באפשרותנו ליצור תיבת הודעה עם הפקד  ValidationSummary  .
פקדי אימות פקדי אימות קלט משתמש – בדיקות בצד שרת ניתן להשתמש במאפיין  Page.IsValid על מנת לבדוק בצד שרת האם כל ערכי הפקדים תקינים .  המאפיין  Page.IsValid   יחזיר  true   רק אם כל פקדי האימות אומתו בהצלחה  ( מחזירים  true  ).  לדוגמה : protected void Button1_Click(object sender, EventArgs e) { if (Page.IsValid) { obj.DoSomething(); } }
פקדי אימות פקדי אימות קלט משתמש – בדיקות בצד שרת במקום לבדוק את כל פקדי האימות כמקשה אחת  ,  ניתן לבדוק פקד פקד  : protected void Button1_Click(object sender, EventArgs e) { if (RequiredFieldValidator1.IsValid) { obj.DoSomething(); } }
תרגול תרגיל  3 -  טופס רישום  ( פקדי אימות )  הוסף לטופס הרישום פקדי אימות לפי הפירוט הבא  : ( שדות חובה מסומנות ב -*) שם פרטי  *. שם משפחה *. תעודת זהות * – 9  ספרות  ,  כולל בדיקה ספרת ביקורת . מין  *  בחירה בין זכר / נקבה . תאריך לידה –  3  פקדי רשימה שנה  ,  חודש  ,  יום . ( לאחר בחירת החודש יש לאכלס את הימים באותו חודש ברשימה לפי מספר החודש והשנה – לחודש פברואר ) מצב משפחתי בחירה מרשימה רווק / נשוי / גרוש / אלמן . רחוב . עיר בחירה מרשימת ערים . כתובת דוא &quot; ל – בדיקת חוקיות  ,  כתובת תקינה .
תרגול תרגיל  3 -  טופס רישום  ( פקדי אימות )   המשך טלפון – תבנית  0x-xxxxxxx   טלפון נייד – קידומת בחירה מרשימה  ,  ומספר בין  7  ספרות . שם משתמש –  6-8  תווים  ,  חובה להתחיל באות . סיסמא – לפחות  5  תווים  ,  אם הקשת הסיסמא יוצג  *.( מאפיין  TextMode=Password ) אימות סיסמא – בדיקה מול  הסיסמא שהוקלדה . הוסף פקד  &quot; שלח &quot;  הצג הודעה אם כל השדות הוקלדו כנדרש . תרגיל  4  הוסף לטופס הרישום פקד  ValidationSummary  . הוסף לטופס הרישום הודעת  MessageBox   אם האימות לא תקין .
פקדים פקדי מכולה   -  Table פקד השרת  Table   מאפשר ליצור טבלה הניתנת לתכנות ולהצגה בדף האינטרנט . בניית הפקד יכולה להתבצע בזמן העיצוב ,  אולם כוחו ועוצמתו האמיתיים של הפקד הם בהיותו ניתן לתכנות בזמן הריצה . בעורך הגראפי : בעורך ה -  HTML : <asp:Table  id=&quot;Table1“ runat=&quot;server&quot;></asp:Table>
פקדים פקדי מכולה   -  Table  -  המשך כדי להגדיר פקד  Table   יש ליצור שורות  ( TableRow )  ותאים  TableCell) ). בעת הפעלת דף האינטרנט הופכות פקודות הפקד  Table   לתגיות הטבלה המוכרות מ -  HTML   דהיינו  ,table ,tr   ו -  td מאפיינים חשובים : תיאור מאפיין הצגה - הסתרה של קווי הרשת של הפקד GridLines יישור אופקי לתכולת הפקד HorizontalAlignment להוספת שורות ותאים לטבלה Rows
פקדים פקדי מכולה   -  Table  -  המשך דוגמה  ,  יצירת טבלה בזמן ריצה : Button btn; for (int j = 0; j < ROWS ; j++) }  TableRow row = new TableRow(); for (int i = 0; i < CELLS; i++) }  TableCell cell = new TableCell(); cell.BorderWidth = 2; btn = new Button(); btn.Width = 40; btn.Height = 30; btn.Text = (i * j).ToString(); btn.BackColor = Color.Blue ; cell.Controls.Add(btn); row.Cells.Add(c); } Table1.Rows.Add(row); } WebFormTable.aspx
פקדים פקדי מכולה  -   Panel  פקד ה -  Panel   נועד לשמש כמכולה לפקדים אחרים . השימוש בו יוצר מראה נפרד וברור לכל קבוצת פקדים . הכלת הפקדים בתוך ה -  Panel   עוזרת לנו להשתמש בהם כיחידה אחת ולהציגם בצורה מסודרת על הטופס . דוגמת  HTML  : <asp:panel id=&quot;Panel1“ runat=&quot;server&quot;>Panel</asp:panel>
פקדים פקדי מכולה  -   Panel  -  המשך לעיתים קרובות משתמשים בו כדי להציג או להסתיר קבוצה שלמה של פקדים . הפקד מאוד עוזר בזמן העיצוב .  כאשר צריכים להעביר קבוצה של פקדים ממקום אחד בטופס לאחר או למחוק את כל הפקדים באותה קבוצה .  כאשר הוא מועבר ללקוח הוא מתורגם ומוצג בדפדפן  ( explorer )  כתגית ה  HTML   <div> .
פקדים כריכת מידע ASP.NET   מציעה לשימוש גלריה של פקדים שמטרתם להציג ישירות מידע הקיים במקור מידע . פקדים אלו מתחברים למקור מידע באמצעות מאפיינים ומציגים אותו בטופס .  הם מקושרים למקור המידע ישירות . ASP.NET   משלבת את המידע בפקדים אלו באופן אוטומטי . פקדי ה -  List-Bound  : DropDownList , ListBox , CheckBoxList , RadioButtonList , DataGrid , DataList , Repeater. WebFormViewControls.aspx
פקדים כריכת מידע –  DataGrid נשתמש בפקד זה כאשר יש צורך להציג נתונים של מקור המידע טבלאי .  כברירת מחדל הוא מציג את הנתונים לקריאה בלבד . ניתן להוסיף לא אפשרות בחירת שורה ,  מחיקת שורה ועריכת שורה . ניתן להוסיף לו פקדים אשר יציגו את המידע כדי שניתן יהיה לערוך אותם . ב -  HTML  : <asp:DataGrid id=&quot;DataGrid1“ runat=&quot;server&quot;></asp:DataGrid> WebFormViewControls.aspx
פקדים כריכת מידע –  DataGrid כל רשומה מוצגת כשורה וכל שדה מוצג כעמודה . הפקד מציג בצורה אוטומטית את המידע השמור במקור המידע . כדי לשלוט בהצגת השדות נשנה את ערך המאפיין  AutoGenerateColumn   ל -  false . באמצעות  DataGrid   נוכל לחלק מידע גדול לעמודים בצורה פשוטה  ( paging ). ניתן למיין את הנתונים בלחיצה על כפתור .
פקדים כריכת מידע –  DataGrid  -  דוגמה OleDbConnection conn=new OleDbConnection(); OleDbCommand cmd= new OleDbCommand(); conn.ConnectionString=@&quot;Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=“ ; conn.ConnectionString +=Server.MapPath(&quot;school.mdb&quot;); string SqlStr=&quot;select * from Student&quot;; cmd.CommandText=SqlStr; cmd.Connection=conn; OleDbDataAdapter da=new OleDbDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds);  DataGrid1.DataSource=ds;  DataGrid1.DataBind(); מחרוזת החיבור הגדרת אובייקט החיבור יצירת משפט  SQL חיבור ה -  DataSet   ל -  DataGrid הגדרת  DataSet   וטעינתו בטבלה הגדרת  Adapter
פקדים כריכת מידע –  DataGrid מאפיינים חשובים : תיאור מאפיין האם לאפשר חלוקה לדפים   AllowPaging  האם לאפשר מיון הנתונים AllowSorting  שינוי מאפייני עיצוב הפריטים לסירוגין AlternatingItemStyle  קובע אם להציג את כל העמודות באופן אוטומטי AutoGenerateColumns  שהערך הזה הוא המפתח . DataGrid   הודעה ל ''  DataKeyField DataSet  איבר של מקור הנתונים למשל טבלה מה '  DataMember DataSet   מקור הנתונים למשל  DataSource viewstate  האם לשמור את מצב הפקד ב - EnableViewState מספר הפריטים בדף אחד PageSize
פקדים כריכת מידע –  DataList   כמו קודמו ,  מיועד להציג נתונים ממקור מידע טבלאי . מציג את המידע בצורה  של תבניות  ( (Templates   שהוגדרו מראש . אפשר להשתמש בו כדי לאפשר למשתמשים שינוי ומחיקת נתונים . אפשר להציג את הנתונים ביותר מעמודה אחת באמצעות המאפיין  RepeatColumns . ב -  HTML   <asp:DataList id=&quot;DataList1“ runat=&quot;server&quot;> </asp:DataList>
פקדים כריכת מידע –  DataList   על מנת להציג את הנתונים חובה להגדיר תבנית אחת לפחות .  בדרך כלל משתמשים בתבנית  ItemTemplate . התבניות של הפקד  DataList : . HeaderTemplate :  הכותרת העליונה . ItemTemplate :  עיצוב הנתונים . AlternateItemTemplate :  עיצוב השורות הזוגיות . SeparatorTemplate :  הפרדה בין השורות . FooterTemplate :  הכותרת התחתונה . SelectedItemTemplate :  עיצוב הפריט הנבחר . EditItemTemplate :  עיצוב הפריטים במצב העדכון .
פקדים כריכת מידע –  DataList -  המשך צעדים בהגדרת הפקד : גישה למסד נתונים ובניית  DataSet   המכיל את הנתונים הנדרשים להצגה . קישור ה -  DataSet   לפקד ,  בדיוק כמו עם  DataGrid  : על מנת שהפקד יציג את הנתונים נדרש להגדיר לפחות תבנית אחת .  החיוני ביותר הוא להגדיר את התבנית  ItemTemplate  על מנת לקבוע כיצד יוצגו הנתונים . ניתן לבנות ולהגדיר עוד תבניות ,  כגון : תבנית להצגת הכותרת העליונה והתחתונה ,  תבנית המעצבת את שורות הנתונים הזוגיות וכו '   .   DataSet ds = new DataSet(); oleDbDataAdapter1.Fill(ds); Datalist1.DataSource=ds; Datalist1.DataBind();
פקדים כריכת מידע –  DataList -  המשך צעדים בהגדרת הפקד – קביעת תבנית : <asp:datalist id=&quot;DataList1&quot; runat=&quot;server&quot;  RepeatColumns=&quot;2&quot; DataKeyField=&quot;id&quot;> <ItemTemplate> <asp:LinkButton id=&quot;Linkbutton2“ runat=&quot;server&quot;> <%# DataBinder.Eval(Container.DataItem, &quot;fName&quot;) %> </asp:LinkButton> <%# DataBinder.Eval(Container.DataItem, &quot;lName&quot;)%> </ItemTemplate> </asp:datalist> מספר עמודות תצוגה תבנית הצגת הנתונים קישור השדה  fName קישור השדה  lName
פקדים כריכת מידע –  DataList -  המשך מאפיינים חשובים : תיאור מאפיין שינוי מאפייני עיצוב הפריטים לסירוגין AlternatingItemStyle  צבע הרקע Backcolor שהערך הזה הוא המפתח . DataGrid הודעה ל ''  DataKeyField DataSet  איבר של מקור הנתונים למשל טבלה מה '  DataMember DataSet   מקור הנתונים למשל  DataSource viewstate  האם לשמור את מצב הפקד ב - EnableViewState סוג הגופן Font הצגה \ הסתרה של קווי הרשת . GridLines מספר העמודות שצריך להציג . RepeatColumns
פקדים כריכת מידע –  Repeater   Repeater   הוא הפקד הפשוט ביותר מבין פקדי כריכת מידע .  הוא גם הגמיש ביותר מביניהם ,  מוגדר באמצעות תגיות  HTML . יתרונו שהוא צורך הכי פחות משאבים בעת הצגת הנתונים . ב -  HTML  - <asp:Repeater id=&quot;Repeater1&quot; runat=&quot;server&quot;></asp:Repeater>
פקדים כריכת מידע –  Repeater  -  המשך ל -  Repeater   יש גם חסרונות : אינו יורש את המחלקה  WebControl ,  לכן הוא לא מכיל את מאפייני עיצוב כמו  DataList   ו -  DataGrid .  תוכן העיצוב  מוגדר ידנית בעזרת תגיות  HTML . דורש כתיבה של קוד מורכב כאשר מעוניינים למיין או לחלק את המידע לעמודים . מוגבל במספר וביכולת האירועים . מכיל פחות תבניות עיצוב .
פקדים כריכת מידע –  Repeater  -  המשך כמו ב -  DataList   גם ה -  Repeater   מוגדר באמצעות תבניות . התבניות של הפקד  Repeater : . HeaderTemplate :  כותרת העליונה . ItemTemplate :  עיצוב הנתונים  ( חובה להשתמש ). AlternateItemTemplate :  עיצוב השורות הזוגיות . SeparatorTemplate :  הפרדה בין השורות . FooterTemplate :  כותרת התחתונה .
פקדים כריכת מידע –  Repeater  –  המשך צעדים בהגדרת הפקד : גישה למסד נתונים ובניית  DataSet   המכיל את הנתונים הנדרשים להצגה . קישור ה -  DataSet   לפקד ,  בדיוק כמו עם  DataGrid  : על מנת שהפקד יציג את הנתונים נדרש להגדיר לפחות תבנית אחת .  החיוני ביותר הוא להגדיר את התבנית  ItemTemplate  על מנת לקבוע כיצד יוצגו הנתונים . ניתן לבנות ולהגדיר עוד תבניות ,  כגון : תבנית להצגת הכותרת העליונה והתחתונה ,  תבנית המעצבת את שורות הנתונים הזוגיות וכו '   . DataSet ds = new DataSet(); oleDbDataAdapter1.Fill(ds); Repeater1.DataSource=ds; Repeater1.DataBind();
פקדים כריכת מידע –  Repeater  –  המשך צעדים בהגדרת הפקד – קביעת תבנית : <asp:Repeater id=&quot;Repeater1&quot; runat=&quot;server&quot;> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, &quot;fName&quot;) %> <%# DataBinder.Eval(Container.DataItem, &quot;lName&quot;)%> </ItemTemplate> </ asp:Repeater > קישור השדה  lName קישור השדה  fName תבנית הצגת הנתונים
פקדים כריכת מידע –  Repeater  –  המשך לפקד  Repeater   יש בסה &quot; כ  5  מאפיינים : תיאור מאפיין DataSet  איבר של מקור הנתונים למשל טבלה מה '  DataMember DataSet   מקור הנתונים למשל  DataSource Viewstate  האם לשמור את מצב הפקד ב - EnableViewState הצגה \ הסתרה של הפקד . Visible
מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
פקדים מותאמים אישית User Controls פקדי משתמש הם תוספות מבורכות ביישומי  ASP.NET  ,  מאפשרים לעשות  שימוש חוזר במרכיבי עיצוב  ופונקציונאליות . דוגמה :  תפריט ראשי של אתר מופיע בכל אחד מדפי האתר ,  ניתן להגדירו כפקד משתמש ולגרור אותו לכל הטפסים  של היישום ,  הפקד מגדיר את המראה הויזואלי של התפריט  אולם מטפל גם באירועים הפנימיים שלו ,  בכך נחסכת מאיתנו טירחה רבה .
פקדים מותאמים אישית User Controls User Controls   הם דפי  ASP.NET   בעל סיומת  .ascx הם פקדי שרת לכל דבר ועניין . בנויים מאוסף פקדים . פקדי משתמש בנויים מ - HTML   ומקוד בשפת  C#   ( בדיוק כמו דפי  aspx ). ניתן לגרור  אותם כפקדי שרת לתוך טפסי  ASP.NET . ניתן לשימוש בכל אחד מדפי היישום . הם לא עומדים בפני עצמם ,  הם חייבים להיות חלק מדף  aspx  . מכיוון שהם נחשבים כחלק מה -  Web Form ,  ולא כדף עצמאי הם לא מכילים את התגיות  < HEAD>  , <BODY >  או  <FORM> .
פקדים מותאמים אישית User Controls שלבים ביצירת ושימוש בפקד משתמש : בחלון ה -  Solution Explorer   מציבים את סמן העכבר מעל שם הפרוייקט ,  הקלקה ימנית  ->  Add  ->  Add Web User Control  . לפרוייקט התווסף דף  ascx  . עיצוב הפקד וכתיבת הקוד המטפל באירועים בדיוק כמו בדפי  aspx  . גרירתו מתוך חלון ה -  Solution Explorer   לתוך דף  aspx  .
פקדים מותאמים אישית User Controls כמו שדף  aspx   מכיל  Page Directive   המכיל הנחיות שפה  ,  CodeBehind   וכו ' ,  דף  ascx   מכיל  Control Directive  : <%@ Control Language=&quot;c#&quot; AutoEventWireup=&quot;false&quot; Codebehind=&quot;MyControl.ascx.cs&quot; Inherits=&quot;WebApplication1.MyControl&quot; TargetSchema=&quot;http://schemas.microsoft.com/intellisense/ie5&quot;%> הדף עצמו מכיל הגדרות HTML  : <TABLE cellSpacing=&quot;1&quot; cellPadding=&quot;1&quot; width=&quot;300&quot; border=&quot;1&quot; id=&quot;Table1&quot;> <TR> <TD> <asp:TextBox id=&quot;TextBox1&quot; runat=&quot;server&quot;></asp:TextBox> <asp:Button id=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;Button&quot;></asp:Button> </TD> </TR> . . . </TABLE>
פקדים מותאמים אישית User Controls כאשר גוררים  User Control   לדף  aspx   מתווסף לדף הגדרת  Register  ,  רישום הפקד בדף : <%@ Register TagPrefix=&quot;uc1&quot; TagName=&quot;MyControl&quot; Src=&quot;MyControl.ascx &quot; %> הפקד מופיע כפקד מן המניין : <uc1:MyControl id=&quot;MyControl1&quot; runat=&quot;server&quot;> </uc1:MyControl>
מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) .
שמירת מצב  ( State ) שרת  Web   הוא חסר מצב  ( Stateless ) ,  מה שאומר שאחרי יצירת התגובה  ( Response )  השרת אינו שומר שום מידע .  כל האובייקטים שהשרת הקצה עבור יצירת התגובה נהרסים ,  כולל כל המידע שהמשתמש שלח לשרת בבקשה  ( Request )  וכולל כל המידע שהשרת יצר בתהליך העיבוד . ניתן לומר שלאחר העברת התגובה ללקוח השרת מאבד ענין בלקוח ,  מנתק את התקשורת עימו והורס את כל האובייקטים והמידע הקשורים בו . אולם ,  לעיתים היישום מעוניין לשמור נתונים קודמים שהיו בדף לפני שליחתם לשרת .  לדוגמה :  אנו מעוניינים לספור את מספר הבקשות של הלקוח ,  במידה וערכו של המונה לא יוכל להשמר בין הבקשות ,  יהיה ערכו שווה תמיד ל -1. לצורך פתרון בעיה זו נוצרו אובייקטים מיוחדים שכל תפקידם לשמור על המידע בין הבקשות .
שמירת מצב  ( State ) פותחו מספר שיטות שניתן לחלקם לשני סוגים עיקריים  :  הראשונה מכילה טכניקות לשמירת המידע בצד הלקוח ,  השניה מכילה טכניקות לשמירת המידע בצד השרת .   שמירת מידע בצד לקוח  Cookies Query String ViewState שמירת מידע בצד שרת Application Session Cache
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Cookies   כאשר אנחנו גולשים באינטרנט חלק מהאתרים בהם אנחנו מבקרים שותלים אצלנו על הדיסק הקשיח קבצי טקסט קטנים כדי לשמור נתונים לצורך השימוש בעת הביקור החוזר באתר . קבצים אלה נקראים  Cookies  ( עוגיות )  ומשמשים לשמירת מידע במחשב הלקוח . ה -  Cookies   הם קבצי טקסט פשוטים ואינם תוכניות או קבצי קוד שיכולים לפעול במחשב שלנו . בהרבה מקרים זה יעיל ובעיקר כאשר יש צורך בהזנת מידע בכל כניסה לאתר ,  במקרה כזה האתר מקבל את המידע מהעוגיות וכך חוסך לנו זמן יקר .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Cookies עוגיות יכולים לשמור רק מידע טקסטואלי ,  אם נרצה לאחסן ערך מספרי ,  נצטרך להמיר אותו לערך טקסטואלי . הלקוח יכול באמצעות הגדרות של הדפדפן למנוע כניסת עוגיות למחשבו ובכך מונע מאיתנו להשתמש בהם . הלקוח יכול למחוק את העוגייה בכל עת . Client Server Request (include Cookies) Response (include Cookies) Cookies
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Cookies השימוש בעוגיות ב -   ASP.NET   מתבצע בעזרת המחלקה  HttpCookie   המוגדרת במרחב השמות  System.Web . דוגמה לקוד פשוט ליצירה ושמירת עוגייה בדפדפן : HttpCookie cookie = new HttpCookie(&quot;MyCookie&quot;); cookie[&quot;Name&quot;] = &quot;MyNameISCookie&quot;; cookie.Expires =DateTime.Now.AddDays(3); Response.Cookies.Add(cookie); הגדרת זמן פקיעת העוגייה הצבת ערך לעוגייה יצירת העוגייה   העוגייה אינה נשלחת מיידית אלא היא מצורפת לתגובת השרת . על פי הקוד העוגייה נשמרת למשך שלושה ימים ואז היא פגת תוקף . לא חובה להגדיר  Cookie.Expires  ,  אולם אז העוגייה נשמרת בזיכרון רק עד לסיום ה -  Session  .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Cookies דוגמה לקריאת מידע מהעוגייה : if (Request.Cookies[&quot;MyCookie&quot;] != null) Label1.Text =Request.Cookies[&quot;MyCookie&quot;].Value; else Label1.Text =&quot;no cookie&quot;; בדיקה האם העוגייה קיימת הצגת ערך העוגייה בתוך  Label אם ננסה לקרוא מעוגייה שלא קיימת בדפדפן או שהיא פגת תוקף נקבל הודעת שגיאה ,  לכן נחוץ לבדוק האם העוגייה קיימת לפני הצגת הערכים שלה .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Cookies ה -  Cookies  מאוחסנים בתיקיה  : C:\Documents and Settings\Administrator
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Cookies מאפיינים חשובים : Name שם העוגייה . Value ערך העוגייה . Values .  אוסף הערכים / מפתחות של העוגייה HasKeys מקבל את הערך  true   אם העוגייה מכילה מפתחות  ( keys ). Domain הדומיין שאליו שייכת העוגייה . Expires תאריך תפוגת העוגייה . Path המסלול אליו מועברת העוגייה .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Cookies חסרונות : משתמשים יכולים למנוע שמירת  Cookies   במחשבם . לא ניתן להסתמך על קיומם של ה -  Cookies  ,  המשתמשים יכולים למחוק אותם בכל רגע נתון . Cookies   נשמרים כקובץ  text   ולכן אמינותם מוגבלת .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Query String Query strings   היא דרך מקובלת להעברת מידע בין דפי האינטרנט של אותו היישום . אפשר להעביר נתונים בקלות מדף אחד לאחר אולם כמות המידע המועבר מוגבלת ותלויה בדפדפן . Query String מתחילה בסמן השאלה  '?'  מיד אחרי כתובת ה -  URL . Client Server QsTest.aspx?x=5
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Query String המידע נשלח לשרת ע &quot; י שרשורו לכתובת ה -  URL . המידע מוגדר בזוגות ,  מפתח ואחריו ערך  : http://www.mysite.co.il?data1=12 ניתן לשלוח יותר מאשר פרמטר בודד ,  ההפרדה בין הפרמטרים מתבצעת באמצעות הסימן  '&' : http://www.mysite.co.il?data1=12&data2=13
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Query String ישנם שתי שיטות עיקריות להעברת מידע ב -   Query String . הראשונה ,  העברת פרמטרים שמכילים את המידע ע &quot; י שרשורם לכתובת ה -  URL . השניה ,  שימוש ב -  StringBuilder   על מנת ליצור את הפרמטרים : Response.Redirect(&quot;TestQueryString.aspx?Name=n”); Response.Redirect(&quot;TestQueryString.aspx?FName=fn&LName=ln”); StringBuilder qs = new StringBuilder(); qs.Append(&quot;TestQueryString.aspx&quot;); qs.Append(&quot;?MyStr=&quot;); qs.Append(&quot;MyName&quot;); qs.Append(&quot;&MyInt=&quot;); qs.Append(95); Response.Redirect(qs.ToString());
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  Query String חסרונות : כמות התווים מוגבלת על ידי הדפדפן . המידע חשוף ,  לא ניתן להסתירו ,  אלא רק להצפינו בעת הצורך . המידע לא נשמר לאחר  סיום ה -  Session  .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  ViewState כדי להבין מהו  ViewState   ומה הצורך בו ,  נקרא את הקטע הבא : משתמש רצה להירשם לאתר שמנהל השמת עובדים לחברות הייטק .  המשתמש נתבקש למלא את קורות החייו .   אחרי כחצי שעה כשסיים את מילוי הטופס ,  נשם לרווחה ולחץ על כפתור  Submit .  איתרע מזלו והוא טעה באחד השדות ,  השרת החזיר לו את הדף עם בקשה שימלא את הפרטיו מחדש !  עצוב ,  כעוס וזעוף הוא  . . . בעיות : 1 –  חוסר נוחות ללקוח . 2 –  העמסת השרת בבדיקות מיותרות . 3 –  העמסת נפח תקשורת מיותר
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  ViewState כברירת מחדל ,  תקשורת אינטרנטית היא חסרת מצב  Stateless   ולכן המידע של הפקדים הולך לאיבוד כאשר הטופס רץ לשרת . וראה זה פלא ,  ב -  ASP.NET   הפקדים שומרים על המידע שלהם באופן אוטומטי לחלוטין . דף  aspx   משתמש במאפיין  ViewState   שתפקידו לשמור את הערכים של מאפייני פקדי השרת שנמצאים על ה -  WebForm . ניתן לשמור ב -  ViewState   כל אובייקט אחר  ,  לדוגמה : ViewState[“BckClr”] = “Yellow”; המידע נשמר בדף  HTML   שנשלח ללקוח בפקד  HIDDEN  . מכיוון שהמידע נשמר בדף עצמו הוא יאבד כאשר הלקוח יופנה לדף אחר .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  ViewState דוגמה : <form name=&quot;Form1&quot; method=&quot;post&quot;  action=&quot;WebForm1.aspx&quot; id=&quot;Form1&quot;> <input type=&quot;hidden&quot; name=&quot;__VIEWSTATE&quot;  value=&quot;dDwtMzM0ODUxNTMwOzs+Qa+5cYHdu9SlrO7i435C3a2T36E=&quot; /> <input type=&quot;submit&quot; name=&quot;Button1&quot; value=&quot;Button&quot; id=&quot;Button1&quot; /> <input name=&quot;TextBox1&quot; type=&quot;text&quot; id=&quot;TextBox1&quot; /> </form> השדה הנסתר  ViewState ערך השדה הנסתר הטופס אחרי ההרצה
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  ViewState במידה ולא מעוניינים ש -  ViewState   ישמור את ערכיו של פקד מסויים ,  ניתן להגדיר זאת באמצעות המאפיין :  EnableViewState = false במידה ולא מעוניינים בשמירת מצב של כל פקדי ה -  Form  ,  ניתן להגדיר  :  EnableViewState = false   ב -  Page Directive  .
שמירת מצב  ( State ) שמירת מידע בצד לקוח –  ViewState דוגמה נוספת המדגימה שימוש ב -  ViewState   על מנת למנות את מספר ה -  Round Trip   של טופס מסויים : if(!Page.IsPostBack) ViewState[&quot;counter&quot;]=1; else ViewState[&quot;counter&quot;]=int.Parse(ViewState[&quot;counter&quot;] .ToString())+1; this.labelCounter.Text=ViewState[&quot;counter&quot;].ToString();
שמירת מצב  ( State ) ערך ה '  ViewState   נשלח בחזרה לשדה הנסתר  _VIEWSTATE השרת מעבד את הנתונים ומעדכן את ה '  ViewState _ VIEWSTATE HTML  דף  PostBack השדה הנסתר  _VIEWSTATE HTML ערך ה ' _ VIEWSTATE   נשלח לשרת
שמירת מצב  ( State ) שמירת מידע בצד שרת –  Application האובייקט  Application   מאפשר מידע משותף לכל הלקוחות הנמצאים כרגע באתר . האובייקט  Application   הוא בעצם מופע מהמחלקה  System.Web.HTTPApplication  . מיועד בעיקר לשמירת נתונים קטנים או בינוניים ,  לאובייקטים גדולים עדיף להשתמש באובייקט  Cache . דוגמא שכיחה לשימוש באובייקט היא הצבת מונה מבקרים  ( COUNTER )  באתר .
שמירת מצב  ( State ) שמירת מידע בצד שרת –  Application האובייקט  Application  שוכן בזיכרון השרת . Request Object Response Object Application Object Client Server
שמירת מצב  ( State ) שמירת מידע בצד שרת –  Application כדי לשמור מידע חדש נשתמש בהוראה הבאה : דוגמא : אפשר גם : דוגמא : Application.Add(“ מפתח ” ,  ערך האובייקט ) Application[&quot;counter&quot;]=0; Application[ שם האובייקט &quot; &quot;]= ערך האובייקט Application.Add(“ Name ”,  “MyName” )
שמירת מצב  ( State ) שמירת מידע בצד שרת –  Application איחזור ערך האובייקט  Application  : TextBox 1.Text=Application[&quot;counter&quot;].ToString(); למחיקת האובייקט נשתמש בהוראה : Application.Remove(&quot; המפתח &quot;);  או  : Application[“ המפתח ” ] = null;
שמירת מצב  ( State ) שמירת מידע בצד שרת –  Application האובייקט  Application   הוא משאב משותף לכל המשתמשים .  על מנת למנוע התנגשויות בעת הגישה אליו ,  התנגשויות שנוצרות מגישה של מספר משתמשים בו בעת ,  יש לנעול אותו לפני כל שינוי הערך ,  דהיינו ,  לאפשר גישה רק של משתמש אחד באותו הזמן . לא לשכוח ,  לשחרר את הנעילה לאחר השינוי . המתודה שנועלת את הגישה אליו ומאפשרת גישה ייחודית : Application.Lock() המתודה שמשחררת את הנעילה : Application.UnLock() צריכים להשתמש במתודות אלה מיד לפני ואחרי  שינוי ערך האובייקט .
שמירת מצב  ( State ) שמירת מידע בצד שרת –  Application דוגמה : Application.Lock(); Application[&quot;counter&quot;]=int.Parse(Application[&quot;counter&quot;].   ToString())+1; Appliction.UnLock();
שמירת מצב  ( State ) שמירת מידע בצד שרת –  Application המידע זמין ליותר מלקוח אחד . Application SERVER Client A Client B Client C
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   ה -  Session   הוא משאב אישי ללקוח ,  המידע אינו משותף ואינו נגיש ללקוחות האחרים .  כאשר הלקוח מבקר באתר ,  השרת מקצה לו אובייקט  Session   ושומר אותו בזיכרון .  האובייקט נשמר בזיכרון כל עוד המשתמש נשאר באתר . אם במשך זמן  ( מוגדר מראש )  האתר ננטש ,  האובייקט  Session   נמחק . הוא נמחק גם כאשר סוגרים את הדפדפן או כאשר נותנים הוראה למחיקתו .
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   דוגמא לשרת שיוצר שלושה אובייקטים מסוג  Session   לשלושה לקוחות . Session A Session B Session C SERVER Client A Client B Client C
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   האובייקט  Session   נמצא בזיכרון השרת . Request Object Response Object Session Object Client Server
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   לדוגמה : לקוח הנכנס לאתר הבנק שלו  מבקש להזדהות  ( שם משתמש וסיסמה ),  הנתונים מאומתים מול מסד נתונים ואם ימצאו נכונים הוא יורשה להכנס לאתר ולבצע פעולות .  אפליקציה בנקאית תהיה בנויה ,  מן הסתם ,  ממספר רב של דפים ,  במידה ונתוני האימות שלו לא ישמרו הוא יאלץ להקליד אותם בכל דף מחדש ,  והמערכת תצטרך לאמת אותם בכל בקשה מחדש . אפשר לשמור את המידע בעוגיות ,  אולם ,  בעיה ,  מטעמי אבטחה אסור זה לא הגיוני ,  העוגיות נשמרות במחשה הלקוח כקבצי טקסט . השימוש ב -  Session   הוא פיתרון הגיוני יותר .
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   כדי ליצור אובייקט חדש ולאתחל אותו נשתמש בהוראה : Session.Add(&quot; שם האובייקט “ ,  ערך האובייקט ); דוגמא  : Session.Add(&quot;Name&quot;,&quot;MyName&quot;); או לחלופין : Session[“ &quot; שם האובייקט ]= ערך האובייקט ; דוגמא  : Session[&quot;Name&quot;]=&quot;MyName&quot;; אפשר לשמור לתוכו גם משתנה או אובייקט אחר כמו  DataSet .
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   האובייקט  Session   יכול לקבל את כל סוגי האובייקטיםאשר עונים על דרישה אחת :  האובייקט צריך לתמוך ב -  .serialization אזהרה :  אם אתה מוסיף אובייקט גדול במיוחד למשל  DataSet   שמכיל  5000  רשומות ,  כאשר נכנסים לאתר  100  משתמשים יישמרו בזיכרון  1000  אובייקטים מסוג  DataSet   שמכילים  500.000  רשומות  !,  בזבוז משאבים ענק .
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   כדי למחוק אובייקט  Session   מהזיכרון נשתמש בהוראה הבאה : Session.Remove(&quot; שם האובייקט &quot;); דוגמא : Session.Remove(&quot;Name&quot;); או Session[“Name”] = null; למחיקת כל הערכים של כל אובייקטי ה '  Session   של המשתמש מהזיכרון נשתמש בהוראה : Session.RemoveAll();
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Session   Session   לעומת  Application ASP.NET Application 1 Session B Session A Session C Application 2 Session B Session A Session C Application 3 Session B Session A Session C
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Cache   האובייקט  Cache  ,  כמון האובייקט  Application  ,  נועד לשמירת מידע המשותף לכל הגולשים באתר . מכיל יכולות מאוד משופרות לעומת  Application  . Request Object Response Object Cache Object Client Server
שמירת מצב  ( State ) שמירת מידע בצד שרת –   Cache הכנסת מידע לאובייקט  Cache : Cache.Insert[“ מפתח ” ] =  ערך האובייקט ); הכנסת מידע לאובייקט  Cache   תוך השימוש מתודה  Insert : Cache.Insert(“ מפתח ” , ערך האובייקט ); דוגמא : Cache.Insert(“Name”,”MyName”); למחיקת האובייקט נשתמש בהוראה : Cache.Remove(“ שם האבייקט &quot;); או Cache[“ שם האובייקט ” ] = null;
שמירת מצב  ( State ) שמירה בצד הלקוח לעומת שמירה בצד השרת Application Session Cache Request Response Cookies Viewstate QueryString
שמירת מצב  ( State ) השוואה בין הטכניקות השונות טכניקה באיזה רמה גודל אופטימאלי Cookies הדף קטן Query String הדף קטן Viewstate הדף קטן Application האפליקציה קטן - בינוני Session המשתמש קטן - בינוני Cache האפליקציה גדול
שמירת מצב  ( State ) מתי להשתמש בכל אחת מהשיטות ? טכניקה מתי להשתמש Cookies לשמירת מידע במחשב הלקוח . Query String URL להעברת מידע מדף אחד לאחר דרך כתובת ה  Viewstate כאשר רוצים לשמור מידע על הדף עצמו . Application כאשר רוצים שהמידע יהיה זמין לכל המשתמשים . Session כאשר רוצים שהמידע יהיה ספציפי למשתמש אחד . Cache לשמירת כמות גדולה של מידע לכל המשתמשים .
ASP.NET מבוא ל -  ASP.NET  . יצירת טפסי  Web  . הפרדה בין קוד לרכיבי תצוגה –  Code Behind . טיפול באירועים . קובץ קונפיגורציה –  Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב  ( State ) . כתב  :  אקת ' ם חאג יחיא עריכה מקצועית  :  ארז קלר www.corner.co.il

More Related Content

PPT
דר קשת יעל Web 2.O
PDF
Mobile Web Best Practices Eyal Sela [Hebrew]
PPT
בניית אתרים שיעור שני
PPTX
Technology going green
PPT
בניית אתרים שיעור ראשון
PPT
Web2 And Library
PDF
אחסון מידע - ל-websql ו-indexdb רן בר-זיק
PPTX
Ado.Net - שיטות לעבודה עם בסיס נתונים בסביבת
דר קשת יעל Web 2.O
Mobile Web Best Practices Eyal Sela [Hebrew]
בניית אתרים שיעור שני
Technology going green
בניית אתרים שיעור ראשון
Web2 And Library
אחסון מידע - ל-websql ו-indexdb רן בר-זיק
Ado.Net - שיטות לעבודה עם בסיס נתונים בסביבת

Viewers also liked (18)

PDF
SQL - שפת הגדרת הנתונים
PPTX
Web Technologies
PDF
SAPUI5 on SAP Web IDE
ODP
שרת לינוקס המשמש להפעלת שוחן עבודה מרוחק במעבדת מחשבים של תחנות חלשות
PDF
דמואים, הדגמות קוד ומסגרות פיתוח חדשניים בטכנולוגיות ווב פתוחות
PDF
5 P&C underwriting metrics to increase profitability
PDF
SQL - מודל ישויות קשרים
PDF
SQL - מודל הנתונים
PPTX
ASP.NET Web API
PPTX
The ASP.NET Web API for Beginners
PPTX
ASP.NET WEB API
PPTX
ASP.NET Mvc 4 web api
PPTX
ASP.NET Web API and HTTP Fundamentals
PDF
C# ASP.NET WEB API APPLICATION DEVELOPMENT
PPS
LA CREACIÓ vista per nens i nenes de 3r de Primària
PDF
Mobile web UX Design - Barak Danin, UXI Live 2011
PPT
Static and Dynamic polymorphism in C++
PPTX
Polymorphism
SQL - שפת הגדרת הנתונים
Web Technologies
SAPUI5 on SAP Web IDE
שרת לינוקס המשמש להפעלת שוחן עבודה מרוחק במעבדת מחשבים של תחנות חלשות
דמואים, הדגמות קוד ומסגרות פיתוח חדשניים בטכנולוגיות ווב פתוחות
5 P&C underwriting metrics to increase profitability
SQL - מודל ישויות קשרים
SQL - מודל הנתונים
ASP.NET Web API
The ASP.NET Web API for Beginners
ASP.NET WEB API
ASP.NET Mvc 4 web api
ASP.NET Web API and HTTP Fundamentals
C# ASP.NET WEB API APPLICATION DEVELOPMENT
LA CREACIÓ vista per nens i nenes de 3r de Primària
Mobile web UX Design - Barak Danin, UXI Live 2011
Static and Dynamic polymorphism in C++
Polymorphism
Ad

Similar to Asp.net (20)

PDF
ASP.net Web Pages
PDF
PDF
C# .net lecture 4 win forms
PDF
javascript
PDF
ASP.net MVC
PDF
דרופל וחווית משתמש
PDF
Mobile and Accessibility
PDF
PHP ואבטחה - חלק ראשון
PDF
מצגת הפתיחה מהמפגש הראשון של חוויית משתמש ישראל
PDF
האם מעצבים צריכים לדעת תכנות - עם הערות
PDF
107 HTML & CSS
ODT
Articles technologies
PDF
עיצוב בעולם הדיגיטלי - הסבר, טיפים וקישורים יעילים
PPT
גליונות עיצוב
PDF
פיתוח אפליקציות Webkit לדפדפנים סלולריים Ppt
PDF
C# .net lecture 1 in Hebrew
PDF
היכרות עם וורדפרס ועוד חן כהן
PPT
שיחת ייעוץ וירטואלית פיתוח תוכנה 3
PDF
Qa extreme2011 from classic lc to agile and the testers types of the future_b...
ASP.net Web Pages
C# .net lecture 4 win forms
javascript
ASP.net MVC
דרופל וחווית משתמש
Mobile and Accessibility
PHP ואבטחה - חלק ראשון
מצגת הפתיחה מהמפגש הראשון של חוויית משתמש ישראל
האם מעצבים צריכים לדעת תכנות - עם הערות
107 HTML & CSS
Articles technologies
עיצוב בעולם הדיגיטלי - הסבר, טיפים וקישורים יעילים
גליונות עיצוב
פיתוח אפליקציות Webkit לדפדפנים סלולריים Ppt
C# .net lecture 1 in Hebrew
היכרות עם וורדפרס ועוד חן כהן
שיחת ייעוץ וירטואלית פיתוח תוכנה 3
Qa extreme2011 from classic lc to agile and the testers types of the future_b...
Ad

Asp.net

  • 1. ASP.NET ליווי מקצועי : ארז קלר www.corner.co.il Web Services מצגת זו מתבססת על המצגת המקורית שנכתבה ע &quot; י : אקת ' ם חאג ' יחיא
  • 2. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 3. מאפייני ASP.NET ASP.NET היא טכנולוגיה מבית היוצר של מיקרוסופט שמיועדת לפיתוח אפליקציות לרשת . טכנולוגיה זו הינה חלק מה - Microsoft .NET Framework , ולכן יכולה להשתמש בכל רכיבי ה - Class Library של NET .. מיועדת לעבודה בצד השרת . הדפים שנוצרים מתורגמים בעזרת מנוע מיוחד המותקן בצד השרת ומוחזרים ללקוח כדפי HTML . כמו כל טכנולוגיות .NET גם ASP.NET היא OOP . מבוא ל - ASP.NET
  • 4. מאפייני ASP.NET - המשך כמו כל תוכנית הכתובה ב - .NET גם יישומי ASP.NET מקומפלים מראש , ועוברים אינטרפטציה בזמן בקשה . ASP.NET אינה שפת תכנות אלא טכנולוגיה שמשתמשת במספר שפות תכנות כמו C# , VB.NET J#, JSCRIPT.NET וכו ... לכתיבת קוד בשפות תכנות יש יתרון גדול על כתיבת קוד בשפות סקריפטים כמו JScript ו ' VBScript . מבוא ל - ASP.NET
  • 5. מבוא ל - ASP.NET מאפייני ASP.NET – המשך ב - ASP.NET קוד ה - HTML מופרד מהקוד הלוגי של הדף ( Code Behind ), הפרדת הקוד מהמראה הוויזואלי של הדף מהווה יתרון עצום , עליו נדבר בהמשך . ב - ASP הקלאסית היו 5 אובייקטים , עליהם התבסס קוד ה - Script , ב - ASP.NET ישנם למעלה מ - 3400 מחלקות מוכנות לשימוש . טכנולוגיית ASP.NET היא לא רק טכנולוגיה ליצירת אתרי אינטרנט , אלא , מכילה גם את שירותי הרשת ( Web Services ) באמצעותם יישומים יכולים לקבל שירותים דרך הרשת . ASP.NET מכילה פקדי שרת (Web Controls) , שמפשטים את העבודה ומתאימים את הקוד לדפדפן שקרא להם ומוכרים על ידי השרת , הפעלת אירועים מתבצעת בצד השרת .
  • 6. מבוא ל - ASP.NET מאפייני ASP.NET – המשך מגדירה קבצי קונפיגורציה ( machine.config ו web.config ) אשר מכילים את ההגדרות של האפליקציה או חלקים ממנה . יותר יציבה ומאובטחת . שילוב טוב יותר עם XML ו - ADO.NET . איתור באגים קל יותר .
  • 7. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET אפליקציית ASP.NET מכילה את הקבצים הבאים : .aspx – ASP.NET Web Form .aspx.cs – code behind page – פונקציונליות . Global.asax – קובץ שמכיל את כל המשתנים הגלובליים והאירועים ברמת האפליקציה , לדוגמה : מה יתבצע כאשר האפליקציה עולה או יורדת . Web.config – הגדרות קונפיגורציה .
  • 8. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET דף aspx מכיל שלושה חלקים עיקריים : הנחיית הדף ( page directive ) : הגדרות מאפייני הדף . קוד צד - לקוח וקוד צד - שרת : קוד המופעל על ידי הלקוח ( דפדפן ) למשל JScript והקוד שרץ בצד השרת ( IIS ). HTML ופקדי השרת : מגדיר את מראה הדף על ידי פקדי HTML או פקדי שרת ( שהם חידוש משמעותי ב - ASP.NET )
  • 9. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET הנחיית הדף ( Page directive ) מרכיב חשוב בדף aspx . מספק הנחיות טיפול בדף ל - Parser ול - Compiler . מוגדר בראש הדף בין התגיות : התגית <% page @ <% . דוגמה : <%@ Page language=&quot;c#&quot; Codebehind=&quot;WebForm1.aspx.cs&quot; AutoEventWireup=&quot;false“ Inherits=&quot;WebApplication1.WebForm1&quot; %> הגדרת שפה התכנות הקובץ שמכיל את קוד צד - השרת המחלקה הממומשת ב - Code Behind לטיפול באירוע הדף Parser - תכנית ניתוח , תכנית המחלקת קלט טקסטואלי לחלקים קטנים יותר ומעבדת אותם
  • 10. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET קוד צד - לקוח ( Client Side ) וקוד צד - שרת ( Server Side ) דפי aspx יכולים להכיל קוד שרץ בצד השרת וקוד שרץ בצד הלקוח . קוד שרץ בצד לקוח יכול להגדיר אלמנטים עיצוביים ( שינוי צבע רקע של פקד בזמן שהעכבר עובר מעליו ), בדיקת תקינות קלט משתמש וכו '. תפקידו של קוד שרץ בצד שרת הוא לטפל באירועי הפקדים ואירועי היישום . יתרונותיו של קוד בצד שרת : הקוד מוסתר מהלקוח , מקומפל , יכול לגשת למשאבי השרת , יכול להשתמש בכל מרכיבי .NET
  • 11. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET קוד צד - לקוח - דוגמה ניתן להוסיף את קטע הקוד הבא בין תגיות ה - Head של הדף : קוד צד שרת נכתב ב - Jscript או ב - VBScript . <script language=&quot;javascript&quot;> function Form1_onmousemove() { document.bgColor=&quot;c5c5ff&quot;; } </script>
  • 12. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET קוד צד שרת קוד צד שרת ניתן לכתוב בדף aspx או בדף נפרד המכונה code behind . לדוגמה : public class WebForm1 : System.Web.UI.Page { … private void Button1_Click(object sender, System.EventArgs e) { int num1=int.Parse(TextBox1.Text); int num2=int.Parse(TextBox2.Text); Label1.Text=(num1+num2).ToString(); } ... }
  • 13. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET דף aspx מורכב משני קבצים : MyPage.aspx – כתוב בפורמט HTML . MyPage.aspx.cs – כתוב בשפת NET במקרה זה # C . בדף aspx מוגדר העיצוב / המראה של האתר , מכיל הגדרות של פקדי HTML ופקדי שרת . כל הפקדים חייבים להופיע בין התגיות . . . </form> <form> . כמו כן , בדף זה ניתן לכתוב את קוד צד הלקוח . דף aspx.cs מכונה Code Behind מטפל באירועי הפקדים ואירועי היישום בצד שרת .
  • 14. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET פקדי שרת מוגדרים באמצעות תגיות מיוחדות , לדוגמה : <asp:TextBox id=&quot;TextBox1&quot; runat=&quot;server&quot;> <asp:TextBox/> בעת החזרת הדף ללקוח הם מתורגמים לתגיות HTML סטנדרטיות : <input type=&quot;text&quot; id=&quot;TextBox1&quot; />
  • 15. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET דוגמה : MyPage.aspx <%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;Default.aspx.cs&quot; Inherits=&quot;_Default&quot; %> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; > <head runat=&quot;server&quot;> <title>Untitled Page</title> </head> <body> <form id=&quot;form1&quot; runat=&quot;server&quot;> <asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot; Text=&quot;Label&quot;></asp:Label> <asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot; OnTextChanged=&quot;TextBox1_TextChanged&quot;> </asp:TextBox> <asp:Button ID=&quot;Button1&quot; runat=&quot;server&quot; OnClick=&quot;Button1_Click&quot; Text=&quot;Button&quot; /> </form> </body> </html>
  • 16. מבוא ל - ASP.NET מבנה אפליקציית ASP.NET דוגמה : MyPage.aspx.cs public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; } } טיפול באירוע פקד בצד שרת
  • 17. מבוא ל - ASP.NET מודל ההרצה ( Request/Response ) מודל ההרצה מתאר מצב שבו הלקוח מבקש דף באמצעות שליחת בקשה לשרת , השרת מגיב ומספק את הדף המבוקש ללקוח . התהליך : הלקוח שולח בקשה ( Request ) לשרת . השרת בודק את סיומת הקובץ , אם מדובר בסיומת מסוג htm או ,html הוא שולף את הקובץ המבוקש ומחזיר אותו מיידית ללקוח . אם מדובר בסיומת מסוג aspx , ( זה מה שמעניין אותנו בשלב זה ( הבקשה עוברת תהליך עיבוד ולאחר מכן המידע מועבר ללקוח .
  • 18. מבוא ל - ASP.NET מודל ההרצה ( Request/Response ) תהליך הבקשה / תגובה : דפדפן שרת שליחת בקשה לשרת עיבוד הבקשה יצירת דף HTML שליחת דף HTML לדפדפן הצגת הדף בניית בקשה
  • 19. מבוא ל - ASP.NET מודל ההרצה ( Request/Response ) כאשר השרת מזהה בקשה עם סיומת aspx הוא מעביר את הבקשה מיד ל &quot; מנוע &quot; ASP.NET . מנוע ה - ASP.NET מבצע הידור לשפת הביניים ( IL או MSIL Microsoft Intermediate Language ) ממיר אותה לשפת מכונה ( Native Code ). ה - CLR שומר את שפת המכונה של הדף . אחרי שהקוד עבר הידור מתחיל שלב קישור קוד המקור , תרגום פקדי השרת לתגיות HTML ועיבוד אירועי המערכת . בסוף ASP.NET מתאימה את הקוד לסוג הדפדפן שבקש את הדף ושולחת אליו קובץ HTML .
  • 20. CLR- Common Language Runtime מספק את הממשק בין ה NET Framework . ושפות התכנות . מפשט פיתוח אפליקציות אחראי להרצת האפליקציה : מספק סביבת עבודה בטוחה , תומך בריבוי שפות ומנהל את הזיכרון , את יצירת האובייקטים ואת הקריאה לשיטות בהן משתמשת האפליקציה . יודע לתרגם MSIL לשפת מכונה CLR – סביבה שמנהלת הפעלת קוד . מפעילה ומתחזקת את הקוד שכתבנו .
  • 21. מבוא ל - ASP.NET Client Server INTERPRETER MSIL מבוא ל - ASP.NET מודל ההרצה ( Request/Response ) בקשת הדף בפעם הראשונה NATIVE CODE בקשה לדף aspx קבלת HTML
  • 22. מבוא ל - ASP.NET מודל ההרצה ( Request/Response ) כאשר הלקוח מבקש את הדף בפעם השנייה , ה - CLR בודק אם היה שינוי בקוד . אם כן asp.net תבצע הידור מחדש לדף . אם בבקשה השניה לא היה שינוי בקוד , asp.net לא תבצע את ההידור וזמן החזרת הדף ללקוח יקטן בצורה משמעותית .
  • 23. מבוא ל - ASP.NET מודל ההרצה ( Request/Response ) בקשת הדף בפעם השנייה Client Server INTERPRETER MSIL NATIVE CODE בקשה לדף aspx קבלת HTML X X
  • 24. הרצת יישום ASP.NET הצגת הדגמה מדיסק ..\CopyCdMicAspAndAdo\Default.htm D:\Zehava\Web ApplicationsTeacherCourse\CopyCdMicAspAndAdo\Default.htm
  • 25. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 26. יצירת טפסי Web דפי aspx הם קבצי טקסט הכתובים בפורמט HTML . דפי aspx מכילים טופס WEB ( Web Form ) אחד ויחיד . בטופס WEB מעצבים את הדף על ידי הצבת פקדים . הם מוצגים כמסמכי HTML בדפדפן . אפשר לכתוב אותם בכל עורך טקסט רגיל כמו למשל בפנקס הרשימות . כדי שהשרת ידע שמדובר בטופס aspx , חייבים לתת לו את הסיומת aspx .
  • 27. יצירת טפסי Web ישנן שני דרכים ליצירת טפסי Web : כתיבת ידנית של קוד בעורך טקסט פשוט כמו פנקס הרשימות . שימוש בסביבות עבודה ותוכנות מתוחכמות כמו Visual Studio .Net . עדיף להשתמש בסביבת הפיתוח , מספקת כלים גראפיים שמקלים על תהליך העיצוב של הטופס - What You See Is What You Get ( WYSIWYG )
  • 28. יצירת טפסי Web כתיבה בעזרת פנקס הרשימות כתיבת הקוד הבא פנקס הרשימות : <%@ Page language=&quot;c#&quot; %> <HTML> <HEAD> <title>Test page</title> </HEAD> <body> <form id=&quot;Form1&quot; method=&quot;post&quot; runat=&quot;server&quot;> <asp:Label id=&quot;Label1&quot; runat=&quot;server&quot;> hello world </asp:Label> </form> </body> </HTML>
  • 29. יצירת טפסי Web כתיבה בעזרת פנקס הרשימות - המשך שמור את הקובץ בשם test.aspx על השרת המקומי במחשב שלך . השרת המקומי נמצא בדרך כלל בכונן C בתיקיה : c:/Inetpub/wwwroot , במידה והוא נמצא בכונן אחר , שנה את השם שלו בהתאם . הפעל את הדפדפן וכתוב את שם הקובץ וכתובת השרת המקומי בכתובת ה - URL . http://localhost/test.aspx קוד זה יציג את המשפט &quot;hello world” .
  • 30. יצירת טפסי Web כתיבה בעזרת פנקס הרשימות – המשך הדף שמתקבל : קוד המקור של הדף מכיל רק תגיות HTML , משום שזה מה שהדפדן מסוגל להציג .
  • 31. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET יצירת פרויקט חדש מסוג ASP.NET WebApplication , והגדרת שם לפרוייקט .
  • 32. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET - המשך לחיצה על OK מציגה את העורך הגראפי ( Designer ) של VS.NET .
  • 33. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET – המשך בחלון ב - SolutionExplorer מופיעים מרכיבי הפרוייקט , נתעלם מכולם ונתמקד בקובץ WebForm1.aspx . זהו קובץ שנוצר אוטומטית בעת יצירת הפרוייקט . ניתן להשתמש בו , לשנות לו את השם או למחוק אותו . הקובץ מכיל טופס אחד כמו כל קבצי ה - aspx . ניתן להוסיף לפרוייקט קבצי aspx נוספים .
  • 34. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET – המשך הוספת קובץ aspx לפרוייקט : לחיצה ימנית על שם הפרויקט ב - Solution Explorer . בחירת Add ומהתפריט שנפתח בוחרים Add Web Form .
  • 35. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET – המשך הוספת קובץ aspx לפרוייקט - המשך : בחלון שנפתח משנים את שם ברירת המחדל של הקובץ ל - MyFirstWebForm.aspx .
  • 36. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET – המשך הוספת קובץ aspx לפרוייקט - המשך : כאשר נלחץ על Open נקבל טופס Web חדש . כעת ניתן לגרור לטופס החדש שנוצר פקדים .
  • 37. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET – המשך הוספת פקדים לטופס : נגרור תיבת טקסט ( TextBox ) וכפתור ( Button ) מארגז הכלים שנמצא בצד שמאל של הטופס ונציב אותם בטופס .
  • 38. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET – המשך בתחתית הטופס קיימת תווית המאפשרת לעבור בין קוד ה - HTML לטופס העיצוב ולהפך . כאשר נרצה לראות את קוד ה - HTML שנוצר נלחץ על המילה HTML שבתווית .
  • 39. יצירת טפסי Web יצירת דף באמצעות Visual Studio.NET – המשך הוספת פקדים לטופס : מקליקים הקלקה כפולה עם העכבר על הכפתור ובחלון שנפתח נכתוב את הקוד הבא ( המסומן בכחול ): private void Button1_Click(object sender, System.EventArgs e) { TextBox1.Text=&quot;hello word&quot;; } החזרה לטופס העיצוב מתבצעת באמצעות התווית View Designer ( התווית השנייה משמאל ) או באמצעות SHIFT+F7 .
  • 40. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 41. Code Behind דף aspx מורכב מרכיבי תצוגה המגדירים את חזות הטופס וקוד המטפל באירועי הפקדים . רכיבי התצוגה מוגדרים באמצעות קוד HTML . הטיפול באירועים מתבצע באמצעות שפת .NET כלשהיא ( C#, VB.NET וכו ') ישנן שלוש שיטות להוספת קוד ל - Web Form : Mixed Code : הקוד ותגיות ה - HTML נמצאים באותו קובץ ומעורבים זה בזה . Inline Code : הקוד ותגיות ה - HTML נמצאים באותו קובץ אבל מופרדים אחד מהשני באמצעות התגית <SCRIPT> . Code Behind : הקוד ותגיות ה - HTML נמצאים בקבצים נפרדים .
  • 42. Code Behind Code Behind הוא אחת האפשרויות החדשות ב - ASP.NET , פותחה על מנת להפריד את קוד המקור מקוד ה - HTML . חלום רטוב של מפתחי ה - ASP הקלאסי . מגדיר קובץ נפרד מקובץ ה - aspx לצורך טיפול באירועי הפקדים בטופס . על פי טכניקה זו עיצוב הדף נקבע בקובץ aspx ונכתב בפורמט HTML , הטיפול באירועים מתבצע בקובץ נפרד ששמו זהה לשם קובץ ה - aspx אולם בתוספת סיומת תקנית של השפה בה הוא נכתב ( cs או vb ). לדוגמה : עיצוב הטופס נקבע בקובץ MyPage.aspx והקוד המטפל באירועי הפקדים נכתב בקובץ MyPage.aspx.cs .
  • 43. Code Behind <tags> Code Single File Code Behind Form1.aspx Form1.aspx Form1.aspx.cs השוואה בין קוד שנמצא בתוך הקובץ לקוד שנמצא בנפרד מהקובץ ( Code Behind ). <tags> Code
  • 44. Code Behind יתרונות מפתחים (developers) ומעצבים ( Designers ) יכולים לעבוד בנפרד . המעצב מתמקד בעיצוב הוויזואלי של הדף , בזמן שהמפתח מתמקד בכתיבת הקוד בלבד . אחרי הקומפילציה ה - Code Behind הופך לקובץ MSIL עם הסיומת dll ותוכנו מוסתר . קריא וברור יותר . תחזוקה קלה יותר , שינוי הקוד אינו משפיע על האלמנטים הויזואליים , ושינוי מראה הדף אינו משפיע על הקוד . הקבצים קטנים ומסודרים יותר . הקוד יכול להכתב בכל שפות הדוט . נט .
  • 45. Code Behind שני הקבצים , דף ה - aspx ודף ה - code behind חייבים להיות מקושרים אחד לשני . קישור שני הדפים נעשה באמצעות התגית @page שנקראת תגית הנחיית הדף ( page directive ). אחרי קישור הקבצים הם יעבדו ביחד כיחידה אחת . קובץ ה - Code Behind WForm1.aspx <%@ Page language=&quot;c#&quot; Codebehind=&quot;WForm1.aspx.cs&quot; Inherits=&quot;WebApp1.WForm1&quot; %>
  • 46. Code Behind WebForm1.aspx WebForm1.aspx.cs
  • 47. Code Behind בסיום הכתיבה המהדר מקמפל את כל קבצי ה - Code Behind לקובץ dll אשר מותקן בספריה Bin שבעצמה נמצאת בספריה הוירטואלית . כאשר הלקוח מבקש דף aspx ( Request ), ה - CLR מבצע הידור ל - dll מריץ אותו ומקשר אותו לדף ה - aspx המתאים , רק לאחר מכן מנוע ה - ASP.NET מסוגל לייצר את ה - HTML ולהחזיר אותו ללקוח ( Response ).
  • 48. Code Behind Response Response Page Class Instantiate, process and render Gen’d Page Class File Generate Instantiate Parse ASPX Engine ASPX File Request Request Code- behind class file ASPX File
  • 49. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 50. טיפול באירועים האירוע Page_Load האירוע Page_Load מתרחש אוטומטית בכל פעם שהדף נטען , בין אם זה כתוצאה של בקשה בפעם הראשונה של הדף או כתוצאה של תגובה של השרת לאירוע שהתרחש . הוא מתרחש רק אחרי אתחול הדף ויצירת פקדי השרת , כדי ש - ASP.NET תוכל לטפל באירועים שלהם . תפקידו לבצע איתחולים לדף ולפקדים . private void Page_Load(object sender,System.EventArgs e) { . . . }
  • 51. טיפול באירועים האירוע Page_Load - המשך Page_Load Page_Unload Control events Textbox1_Changed Button1_Click Page_Init Change Events Action Events Page is disposed
  • 52. טיפול באירועים Page.IsPostBack בכל בקשה ( גם בבקשה חוזרת של אותו הדף ) נוצר דף חדש . האירוע Page_Load מתרחש בכל טעינה של הדף , לכן הקוד שנמצא באירוע הזה מופעל כל פעם מחדש . בקשה חוזרת של אותו הדף מכונה ( Round Trip ). לעיתים נרצה לבצע איתחולים רק בטעינה הראשונה של הדף ולהימנע מהם בבקשות חוזרות של אותו הדף . בדף מוגדר מאפיין בוליאני בשם IsPostBack , ASP.NET משתמשת במאפיין זה על מנת לבדוק אם הוא נדרש בפעם הראשונה או לא ( Round Trip ). כאשר הלקוח מבקש את הדף בפעם הראשונה , המאפיין IsPostBack יקבל את הערך false . מהבקשה השניה ואילך ערכו true .
  • 53. טיפול באירועים Page.IsPostBack - המשך נשתמש בו באירוע Page_Load בצורה הבאה : private void Page_Load(object sender,System.EventArgs e) { if (!Page.IsPostBack) { // הקוד מתבצע רק כאשר הדף נשלח בפעם הראשונה } // הקוד מתבצע בכל פעם שהדף נשלח }
  • 54. טיפול באירועים Page.IsPostBack - המשך דוגמה : נניח שקיים הדף הבא : המכיל פקד ListBox ופקד Button . WebFormIsPostBack.aspx
  • 55. טיפול באירועים Page.IsPostBack – המשך באירוע Page_Load מאתחלים את הפקד בערכים הבאים : private void Page_Load(object sender, System.EventArgs e) { ListBox1.Items.Add(&quot;Shoshana&quot;); ListBox1.Items.Add(&quot;Zelda&quot;); ListBox1.Items.Add(&quot;Yerachmiel&quot;); ListBox1.Items.Add(&quot;Zrubavel&quot;); } בכל לחיצה על הלחצן Button הדף נשלח חזרה לשרת .
  • 56. טיפול באירועים Page.IsPostBack – המשך בבקשה הראשונה של הדף יוצגו בפקד הערכים הבאים : בבקשה השניה של הדף יוצגו בפקד הערכים הבאים :
  • 57. טיפול באירועים Page.IsPostBack – המשך תופעה זו מתרחשת משום שבכל בקשה מתרחש האירוע Load אשר מוסיף לפקד את רשימת הערכים . על מנת להימנע מכך נוסיף את המאפיין Page.IsPostBack : private void Page_Load(object sender, System.EventArgs e) { if(!Page.IsPostBack) { ListBox1.Items.Add(&quot;Shoshana&quot;); ListBox1.Items.Add(&quot;Zelda&quot;); ListBox1.Items.Add(&quot;Yerachmiel&quot;); ListBox1.Items.Add(&quot;Zrubavel&quot;); } }
  • 58. טיפול באירועים אירועי פקדים הפיתוח ב - ASP.NET הוא Event Driven . אירועים מתרחשים כתגובה לפעילות משתמשים על הפקדים . כדוגמה : לחיצה על כפתור , שינוי תוכן תיבת הטקסט , בחירת פריט מתוך תיבה משולבת וכו ... . כל אירוע ניתן לקשר למתודה המבוצעת בעת התרחשות האירוע , המתודות המטפלות באירועי פקדים מכונות Event handler . המתודות הללו מוגדרת בקובץ ה - Code Behind ומורצות רק בשרת . לדוגמה : private void Button1_Click(object sender, System.EventArgs e) { }
  • 59. טיפול באירועים אירועי פקדים - המשך למתודות Event handler יש מבנה דומה . הכותרת מורכבת משם הפקד והאירוע שהתרחש , לדוגמה : Button1_Click, ListBox1_SelectedIndexChanged, TextBox1_TextChanged המתודות יקבלו שני פרמטרים : System.EventArgs e , object sender sender - מציין איזה פקד יצר את האירוע . e - מכיל מידע נוסף לצורך הטיפול באירוע .
  • 60. טיפול באירועים אירועי פקדים - המשך לכל פקד מציג מספר אירועים , את האירועים שהפקדים מציגים ניתן לראות בחלון של מאפייני הפקד ( Properties Window ). כדי לראות את האירועים נלחץ על תווית ה - Events ( צורה של ברק בצבע צהוב ) רשימת האירועים של הפקד Button :
  • 61. טיפול באירועים אירועי פקדים - המשך אירועי הפקדים מתבצעים רק בשרת . לכל פקדי השרת מוגדרים מספר אירועים בנוסף לחמשת האירועים שהם יורשים מהמחלקה Control : Init Load PreRender Unload DataBinding
  • 62. טיפול באירועים אירועי פקדים - המשך האירועים מתרחשים בדפדפן הלקוח ומטופלים בשרת . לקוח שרת אירוע event handler הודעת אירוע תגובה
  • 63. טיפול באירועים אירועי פקדים - המשך קישור האירוע עם הקוד שמתרחש בשרת כתגובה לאירוע מתבצע באמצעות delegates . ה - delegates הוא אובייקט המכיל מצביעים למתודות . Visual Studio.NET מבצע בעצמו את תהליך הקישור בין אירוע הפקד לבין הקוד המטפל בו בצד שרת . דוגמה : קישור בין האירוע Page.Load ו - Button.Click לבין המתודות המטפלות בהן ( Event Handlers ). this.Button1.Click += new System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load);
  • 64. טיפול באירועים אירועי המערכת ב - Global.ASAX Global.aspx הוא קובץ טקסט המכיל מידע גלובלי על האפליקציה . תפקידו העיקרי הוא הטיפול בשגרות האירועים של האפליקציה כמו למשל התחלה וסיום שיחה Session והתחלה וסיום האפליקציה . אפשר להגדיר ולאתחל בו משתנים , אובייקטים ושגרות אירועים . הוא אופציונאלי , אי הגדרתו מאלצת את האפליקציה להשתמש בהגדרות הסטנדרטיות שלה .
  • 65. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך נועד בעיקר לטיפול באירועי Session ו - Application . קובץ זה מקומפל ביחד עם קבצי ה - Code Behind ל - dll , אי אפשר להפעיל אותו ישירות מהדפדפן . Global.aspx מאפשר שליטה על אירועים שהתרחשו ברמת האפליקציה ולא ברמת הדף . קובץ זה זמין לכל הדפים באפליקציה , לכן כל שינוי בו מחייב אתחול מחדש של האפליקציה . האתחול מתבצע ברקע בלי שהמשתמש ירגיש .
  • 66. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך האירועים החשובים של Global.ASAX תיאור האירוע מתרחש פעם אחת בעת הפעלת אפליקציית ASP.NET . Application_Start() מתרחש פעם אחת בעת סיום אפליקציית ASP.NET . Application_End() מתרחש בכל פעם ש - Session חדש מתחיל ( בעת הבקשה ראשונה של הלקוח - HTTP Request ). Session_Start() מתרחש בכל פעם ש - Session מסתיים ( למשל כאשר הלקוח סוגר את הדפדפן ). Session_End()
  • 67. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך דוגמה : מעקב אחר מספר הגולשים באתר . בדוגמה נשתמש באירועי המערכת הבאים : Application_Start , Session_Start ו - Session_End . יש להוסיף את הקובץ לפרויקט Add->New Item . 1 - נגדיר ב - Global.asax משתנה סטטי מסוג int שימנה את מספר המבקרים באתר : protected static int activeUsers; WebFormGlobalAsax.aspx
  • 68. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך דוגמה – המשך : 2 - נגדיר מאפיין שיחזיר לנו את מספר המבקרים לצורך הצגתם בטופס האינטרנט בעת הצורך . מספר המבקרים מאוחסן במשתנה activeUsers שהגדרנו קודם . Public static int ActiveUsers { get { return activeUsers; } }
  • 69. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך דוגמה – המשך : 3 - באירוע Application_Start ( מתרחש כאשר האפליקציה מתחילה ), נאתחל את מספר המבקרים ל - 0. כמובן שאפשר להוסיף הגדרות אחרות כמו למשל מספר המבקרים ביום אחד או מספר הביקורים בכל הדפים או כל הגדרה נחוצה אחרת . protected void Application_Start(Object sender, EventArgs e) { activeUsers = 0; }
  • 70. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך דוגמה – המשך : 4- באירוע Session_Start , כלומר בעת כניסת הלקוח לאתר נעלה את המונה באחד . כדי לחסום את הגישה לאירוע למשתמש בודד בכל פעם נשתמש במתודות Application.Lock () ו - Application.UnLock () . חשוב לעשות זאת כדי למנוע התנגשויות בעת הכניסה של יותר ממשתמש אחד בו בעת . protected void Session_Start(Object sender, EventArgs e) { Application.Lock(); activeUsers ++ ; Application.UnLock(); }
  • 71. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך דוגמה – המשך : 5 - באירוע Session_End , כלומר בעת שהלקוח עוזב את האתר נחסיר מהמונה אחד . נשתמש במתודות Application.Lock() ו ' Application.UnLock() מאותן סיבות שהזכרנו קודם . protected void Session_End(Object sender, EventArgs e) { Application.Lock(); activeUsers --; Application.UnLock(); }
  • 72. טיפול באירועים אירועי המערכת ב Global.ASAX - המשך דוגמה – המשך : 6 – על מנת לצפות במספר המשתמשים נוסיף את הקוד הבא לאחד מדפי ה - aspx : private void Page_Load(object sender, System.EventArgs e) { this.LabelUsersCounter.Text = Global.ActiveUsers.ToString(); }
  • 73. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 74. Web.Config קובץ הקונפיגורציה הינו קובץ טקסט בפורמט XML סטנדרטי שמכיל את הגדרות התצורה של האפליקציה . אחד החידושים ב - ASP.NET . אפשר לתעד את התוכן שלו : <!-- תיעוד --> אפשר לפתוח ולעדכן את הקובץ בכל עורך טקסט רגיל . יכול לשמור הגדרות לדף בודד , לתיקיה שלמה או לכל האפליקציה . הוא אופציונלי ולא חייב להימצא באפליקציה .
  • 75. Web.Config קובץ הקונפיגורציה ממוקם בתיקיית השורש של האפליקציה . אפשר ליצור מספר קבצי קונפיגורציה באפליקציה אחת , אבל בתיקיות שונות .
  • 76. Web.Config דוגמא פשוטה לקובץ Web.Config . <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?> <configuration> <system.web> <authentication mode=&quot;Forms&quot;> <forms name=&quot;appNameAuth&quot; loginUrl=&quot;login.aspx&quot; timeout=&quot;20&quot;> </forms> </authentication> <authorization> <deny users=&quot;?&quot; /> </authorization> </system.web> </configuration>
  • 77. Web.Config קובץ קונפיגורציה , מדוע ? תסריט , יישום ASP.NET נעזר במסד נתונים Access על מנת לקרוא ולשמור נתונים . על מנת לעבוד עם מסד הנתונים יש להגדיר מחרוזת חיבור ( Connection String ), מחרוזת החיבור הוגדרה בקוד , הפרוייקט קומפל והותקן בספרייה וירטואלית בשרת אינטרנט . עברו חלפו הימים , האתר נעשה פופולארי ומסד הנתונים לא מצליח לעמוד בקצב , יש להחליפו במסד נתונים חזק יותר כמו SQL Server . מחרוזת החיבור של SQL Server שונה משל Access ולכן נאלצנו לחזור לקוד המקור לשנות את מחרוזת החיבור , לקמפל מחדש ולהתקין מחדש את היישום בשרת האינטרנט .
  • 78. Web.Config קובץ קונפיגורציה , מדוע ? הפיתרון . על מנת למנוע את הטרחה המרובה הזו נגדיר את מחרוזת החיבור בקובץ טקסטואלי חיצוני , התוכנית יכולה בכל עת לגשת לקובץ , לקרוא ולהשתמש בהגדרות הנשמרות בו . במידה ויוחלף מסד הנתונים , השינוי יהיה בקובץ הקונפיגורציה בלבד ללא צורך בקומפילציה והתקנה מחודשת .
  • 79. Web.Config תוכן הקובץ מאפשר שמירת מאפייני האפליקציה ע &quot; י המאפיין appSettings , עליו נדבר בהמשך . לדוגמה : מחרוזת החיבור ( ConnectionString ) . אפשר לשמור את נתוני משתמשי המערכת ( אם מספרם קטן ) באמצעות האלמנט credential . אבטחה ( Security ): במקום לכתוב קוד בכל דף מאובטח , אפשר לעשות זאת בקובץ . ניתן לאבטח תיקיות ואפילו האתר כולו . <location path=&quot;admin&quot;> <system.web> <authorization> <deny users=&quot;?&quot; /> </authorization> </system.web> </location>
  • 80. Web.Config תוכן הקובץ – המשך דפי שגיאה מותאמים אישית : שגיאה באתר עלולה להציג מידע רגיש , שלא נרצה שהמשתמש יראה . לכן עדיף להוביל את המשתמש בעת הופעת השגיאה לדף שגיאות אישי משלנו . טיפול בגלובליזציה ( Globalization ): קובץ הקונפיגורציה מאפשר טיפול בתאריכים , שפות ולאומים שונים . דוגמא לעבודה עם התאריך והשפה העברית : <customErrors mode=&quot;On&quot; > <error statusCode=&quot;404&quot; redirect=&quot;PageNotFoundError.aspx&quot;/> <error statusCode=&quot;500&quot; redirect=&quot;MyAppCustError.aspx&quot;/> </customErrors> <globalization requestEncoding=windows-1255 responseEncoding=windows-1255  culture=he-il  />
  • 81. Web.Config תוכן הקובץ – המשך טיפול ב - Session , זמן הפקיעה של האובייקט מוגדר 20 דקות כברירת המחדל , אפשר לשנות הגדרה זו ע &quot; י שינוי המאפיין timeout . אפשר להגביל את גודל הקבצים שנשלחים ע &quot; י המשתמש ואת משך הזמן לקבלתם . וכך נוכל למנוע מהמשתמשים בעלי כוונות זדוניות מלהפציץ את האתר בקבצים . ערך ברירת המחדל הוא 4mb . <configuration> <system.web> <sessionState timeout=&quot;15&quot; /> </system.web> </configuration> <httpRuntime maxRequestLength=&quot;1100&quot; executionTimeout=&quot;90&quot;/>
  • 82. Web.Config שמירת מידע לקובץ קונפיגורציה אחד הדרכים לשמירת מידע בקובץ הקונפיגורציה היא באמצעות האלמנט appSetting המאפשר לשמור מידע מותאם אישית . האלמנט appSetting> > מוגדר באמצעות זוג מפתח - ערך ( key-value ) התכונה הראשונה תשמש כמפתח ראשי והשניה תציב ערך לאותו מפתח . באמצעות המפתח נוכל לגשת לערך שלו מכל דף באפליקציה .
  • 83. Web.Config שמירת מידע לקובץ קונפיגורציה – המשך דוגמא לשמירת ערך בקובץ הקונפיגורציה : <appSettings> <add key=&quot;fName&quot; value=&quot;MyFirstName&quot;/> <add key=&quot;lName&quot; value=&quot;MyLastName&quot;/> <add key=&quot;conString&quot; value=&quot;Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\\inetpub\\wwwroot\\Testguatda.com/cmx.p\\MyDB.mdb&quot; /> </appSettings>
  • 84. Web.Config קריאת מידע מקובץ קונפיגורציה כדי לקרוא מידע מקובץ הקונפיגורציה , צריכים להוסיף את מרחב השמות ( namespace ) System.Configuration . המחלקה ConfigurationSettings ששייכת למרחב השמות הנ &quot; ל מכילה מאפיין בשם AppSettings , מאפיין זה יודע לפנות לקובץ הקונפיגורציה ולקרוא ערכים : דוגמה : ConfigurationSettings.AppSettings[“ המפתח &quot;]; המפתח שיצרנו בקובץ Web.config txtFName.Text=ConfigurationSettings.AppSettings[&quot;fName&quot;]; txtLName.Text=ConfigurationSettings.AppSettings[&quot;lName&quot;];
  • 85. Web.Config הקשר היררכי בין קבצי קונפיגורציה ברמת השרת ( IIS ) מוגדר קובץ קונפיגורציה הנקרא machine.config , קובץ זה מותקן בעת התקנת .NET Framework ומכיל הגדרות גלובאליות המשותפות לכל יישומי ASP.NET המותקנות השרת . קובץ הקונפיגורציה Web.Config מקבל את הגדרות ברירת המחדל שלו מ - Machine.Config . במידה ובאפליקציה לא מוגדר Web.Config , היישום מקבל את ההגדרות ישירות מ - Machine.Config . במידה וביישום מוגדר Web.Config הוא יהיה זמין ליישום ולכל היישומים בתת הספריות . SubDir RootDir SubDir web.config זמין גם לתקיות אלה
  • 86. Web.Config הקשר היררכי בין קבצי קונפיגורציה - המשך קובץ קונפיגורציה דורס את ההגדרות הקיימות בקובץ הקונפיגורציה הנמצא בספריה שמעליו , וקובץ הקונפיגורציה בספריית השורש דורס את ההגדרות המוגדרות ב - Machine.Config . IIS Web Server wwwroot Sub Dir machine.config Web.Config Web.Config
  • 87. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 88. פקדים סוגי פקדי שרת Server Controls HTML SERVER CONTROLS - פקדים זהים לפקדי HTML רגילים , אך נותנים את היכולות של ASP.NET על - ידי תוספת פשוטה לפקד : runat=“server” משתמשים בשיטה זו בעיקר כדי להמיר במהירות דפי HTML לעבודה עם טכנולוגיית NET . WEB SERVER CONTROLS – פקדי שרת VALIDATION CONTROLS – פקדי אימות - USER CONTROLS פקדי משתמש
  • 89. פקדים פקדי שרת Html Server Controls Html Controls או פקדי HTML הם קבוצה של פקדים בסיסיים שנתמכים ע &quot; י שפת HTML , לדוגמה : Input , Textarea, Options וכו '. הם פשוטים ולא דורשים משאבים גדולים במיוחד . כברירת מחדל פקדים אלו פועלים רק בצד הלקוח ( Client Side ). ניתן להפוך אותם גם לפקדי צד השרת ( HTML Server control ). כפקדי צד שרת ניתן לעבוד עימם גם בצד לקוח וגם בצד שרת .
  • 90. פקדים פקדי שרת Html Server Controls – המשך על מנת להפוך פקד HTML רגיל לפקד שרת יש ללחוץ על הפקד עם הלחצן הימני בעכבר , מהתפריט בוחרים באפשרות Run as Server Control . או לחילופין להוסיף את המאפיין runat=&quot;server&quot; להגדרת הפקד בדף ה - HTML . Html Control : <input type=&quot;text&quot;> Html Server Controls <input type=&quot;text&quot; runat=“server”>
  • 91. פקדים פקדי שרת Html Server Controls – המשך מכילים את כל התכונות של פקדי HTML ובנוסף יש להם את יכולת העבודה בשיטה המונחית עצמים . תומכים במנגנון התכנות המונחה אירועים ( הן בצד לקוח והן בצד שרת ). פקדים אלו נמצאים תחת מרחב השמות ( namespace ) System.Web.UI.HtmlControls .
  • 92. פקדים פקדי שרת Web Server Controls סידרה של פקדים שפותחו במיוחד לעבודה בסביבת ASP.NET , מכונים גם Controls ASP.NET Web Form . לפקדים יש מאפיינים , אירועים ומתודות שאפשר לעבוד איתם בזמן הריצה . לפני כל פקד מסוג זה נמצא את התגית : <asp:> פקדים אלו נמצאים תחת מרחב השמות ( namespace ) System.Web.UI.WebControls לא מוכרים על ידי הדפדפנים , אלא מתורגמים לפקדי HTML רגילים , השרת מייצר עבורם קוד שתלוי בדפדפן שביקש את הדף . .
  • 93. פקדים פקדי שרת Web Server Controls כולם יורשים מאותה מחלקה , ולכן יש להם מאפיינים משותפים , כמו width, Height, BackColor וכו ' פקדי HTML מסורתיים הם stateless – חוזרים להגדרות ברירת מחדל , בעוד שעבור פקדי שרת מצב התצוגה וקלט המשתמשים נשמרים אוטומטית באמצעות אובייקט הנקרא ViewState . חייבים להיות מוגדרים כ - &quot; runat = server ” , אחרת לא יפעלו . אירועים מורצים רק בצד השרת , לא מוכרים בצד לקוח . מכילים אוסף של פקדים מיוחדים שלא קיימים ב - HTML , כגון : Calendar , DataGrid , AdRotator , ImageButton וכו ' .
  • 94. פקדים פקדי שרת השוואה בין סוגי הפקדים . תיבת טקסט כ - Html Control : <input type=&quot;text“ /> תיבת טקסט כ - HTML Server Control : <input type=&quot;text“ id=“mytext” runat=“server” /> תיבת טקסט כ - Web Server Control : <asp:TexBox id=“mytext” runat=“server” />
  • 95. פקדים פקדי שרת השוואה בין סוגי הפקדים . בעורך הגראפי Html Control ו - Web Server Control נראים אותו דבר למעט של - Web Server Control נוסף חץ ירוק קטן בפינה השמאלית העליונה . ב 2005 VS ב VS2008 שם הפקד מתחיל באות גדולה Web Server Control Html Control
  • 96. פקדים הפקדים הסטנדרטיים - TextBox תפקידו לאפשר קבלת קלט מהמשתמש . משמש גם להצגת נתונים , אם כי לשימוש זה יש תחליפים . המשתמש יכול לערוך את הטקסט , להעתיק , להדביק , לגזור או לבחור טקסט שבתוך הפקד . אפשר למנוע את העריכה של הטקסט ע &quot; י שינוי ערך המאפיין ReadOnly ל - true . כברירת המחדל של TextBox אפשר להכניס עד 2048 תווים , ניתן להגביל מספר תווים זה לפחות ( MaxLength ) או להגדילו עד 32 KB של טקסט ( MultiLine TextMode = ).
  • 97. פקדים הפקדים הסטנדרטיים - TextBox - המשך דוגמא ל - TextBox בעורך הגראפי : בעורך ה - HTML : <asp:TextBox id=&quot;TextBox1“ runat=&quot;server&quot;> TextBox </asp:TextBox> בדפדפן : > input name=&quot;TextBox1&quot; type=&quot;text&quot; id=&quot;TextBox1”/>
  • 98. פקדים הפקדים הסטנדרטיים - TextBox - המשך מאפיינים חשובים מאפיין צבע הרקע Backcolor סוג הגופן Font גובה הפקד Height מספר התווים המקסימאלי שהפקד יכול לקבל MaxLength למניעת העריכה ReadOnly הטקסט שמופיע מעל הפקד Text הצורה בה יוצג הטקסט TextMode הצגה או הסתרה של הפקד Visible רוחב הפקד Width
  • 99. פקדים הפקדים הסטנדרטיים – Label הדרך הפשוטה ביותר להוספת טקסט סטטי לטופס היא להוסיפו בין תגיות ה Body של דף האינטרנט . החיסרון הוא שלא ניתן לשנות את הטקסט בזמן הריצה , הפקד Label בא לפתור מגבלה זו . פקד זה משמש ככותרת או כתיאור קצר של המידע שבטופס . להבדיל מטקסט סטטי בדף , ב - Label ניתן לשנות את הטקסט באמצעות המאפיינים של הפקד . המשתמש אינו יכול לשנות ישירות את הטקסט שלו .
  • 100. פקדים הפקדים הסטנדרטיים – Label – המשך דוגמה ל - Label בעורך הגראפי : בעורך ה - HTML : <asp:Label id=&quot;Label1&quot; runat=&quot;server&quot;>Label</asp:Label> בדפדפן : <span id=&quot;Label1&quot;>Label</span>
  • 101. פקדים הפקדים הסטנדרטיים – Label – המשך מאפיינים חשובים תיאור מאפיין צבע הרקע Backcolor סוג המסגרת BorderStyle עובה המסגרת BorderWidth סוג הגופן Font צבע הטקסט ForeColor גובה הפקד Height הטקסט שמופיע מעל הפקד Text הצגה או הסתרה של הפקד Visible רוחב הפקד Width
  • 102. פקדים הפקדים הסטנדרטיים – Button פקד פקודה , הקלקה על פקד זה פירושה &quot; ריצה &quot; מיידית לשרת ( Postback ) . בשרת יופעל אירוע שהוגדר מראש .
  • 103. פקדים הפקדים הסטנדרטיים – Button – המשך דוגמא לשימוש בעורך הגראפי : בדף HTML : <asp:Button id=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;Button&quot;> </asp:Button> בדפדפן : <input type=&quot;submit&quot; name=&quot;Button1&quot; value=&quot;Button&quot; id=&quot;Button1&quot; />
  • 104. פקדים הפקדים הסטנדרטיים – Button – המשך מאפיינים חשובים תיאור מאפיין צבע הרקע Backcolor סוג המסגרת BorderStyle עובי המסגרת BorderWidth מעביר ערך זה בעת אירוע הלחיצה CommandName העברת מידע נוסף בעת אירוע הלחיצה CommandArgument גובה הפקד Height הטקסט שמופיע מעל הפקד Text הצגה או הסתרה של הפקד Visible רוחב הפקד Width
  • 105. פקדים פקדי רשימה – DropDownList מאפשר בחירה של פריט אחד מתוך רשימה של פריטים המוגדרים מראש . רשימת הפריטים מוסתרת עד ללחיצה על הפקד . בלחיצה על הפקד הרשימה נגלית וניתן לבחור פריט אחד . שימושי כאשר צריכים לאפשר למשתמש בחירה של ערך מתוך סדרת ערכים תוך חיסכון בשטח תצוגה . הוספת הפריטים לפקד יכולה להתבצע בזמן עיצוב או בזמן ריצה : בזמן העיצוב : באמצעות המאפיין Items של הפקד . בזמן הריצה : באמצעות המתודה Add .
  • 106. פקדים פקדי רשימה – DropDownList - המשך מצב סגור : מצב פתוח :
  • 107. פקדים פקדי רשימה – DropDownList - המשך מאפיינים חשובים תיאור מאפיין האם לשלוח את הטופס לשרת אחרי בחירת פריט מהרשימה AutoPostBack DataSet איבר של מקור הנתונים למשל טבלה מה DataMember DataSet מקור הנתונים למשל DataSource למשל השדה של הטבלה DataTextField ערך של שדה הנתונים DataValueField אוסף הפריטים של הפקד Items המספר הסידורי של הפריט שנבחר SelectedIndex מאפשר בחירה של ערך אחד או יותר מפריטי הרשימה SelectionMode ערך הפריט הנבחר SelectedValue
  • 108. פקדים פקדי רשימה – ListBox מאפשר בחירה של פריט אחד או יותר מתוך רשימה של פריטים המוגדרים מראש . רשימת הפריטים גלויה כל הזמן . שימושי כאשר צריכים לאפשר למשתמש בחירה של ערך אחד או יותר מתוך סידרת ערכים . הוספת הפריטים לפקד יכולה להתבצע בזמן עיצוב או בזמן ריצה : בזמן העיצוב : באמצעות המאפיין Items של הפקד . בזמן הריצה : באמצעות המתודה Add.
  • 109. פקדים פקדי רשימה – ListBox - המשך מאפיינים חשובים תיאור מאפיין האם לשלוח את הטופס לשרת אחרי בחירת פריט מהרשימה AutoPostBack DataSet איבר של מקור הנתונים למשל טבלה מה ' DataMember DataSet מקור הנתונים למשל DataSource למשל השדה של הטבלה DataTextField ערך של שדה הנתונים DataValueField אוסף הפריטים של הפקד Items המספר הסידורי של הפריט שנבחר SelectedIndex מאפשר בחירה של ערך אחד או יותר מפריטי הרשימה SelectionMode ערך הפריט הנבחר SelectedValue
  • 110. פקדים המאפיין AutoPostBack כברירת מחדל הטופס חוזר לשרת ( Postback ) רק כאשר המשתמש לוחץ על Button . בפקדים ListBox, DropDownBox מוגדר האירוע SelectedIndexChanged המופעל כאשר המשתמש בוחר ערך מתוך רשימת ערכים , בפקד TextBox מוגדר האירוע TextChanged המופעל כאשר הפקד מאבד פוקוס לאחר שהמשתמש הקליד בו דבר מה . כברירת מחדל , שלושת אירועים אלו נשמרים בצד לקוח עד שהמשתמש מקליק על Button . בהקלקה הטופס נשלח לשרת ושם מבוצעים כל אותם אירועים . האירועים מבוצעים על פי סדר הוספת הפקדים לטופס בזמן עיצוב .
  • 111. פקדים המאפיין AutoPostBack – המשך לדוגמה : נציב בטופס את הפקדים הבאים על פי הסדר : DropDownList, ListBox. ו - TextBox . נוסיף עוד פקד Button שתפקידו לשלוח את הטופס לשרת , ועוד פקד ListBox בו נרשום את האירועים שהתרחשו בטופס . WebFormControls.aspx
  • 112. פקדים המאפיין AutoPostBack – המשך הטיפול באירועים : private void Button1_Click( . . . ) { lstEventList.Items.Add(&quot;Button1_Click&quot;); } private void ListBox1_SelectedIndexChanged( . . . ) { lstEventList.Items.Add(&quot;ListBox1_SelectedIndexChanged&quot;); } private void TextBox1_TextChanged( . . . ) { lstEventList.Items.Add(&quot;TextBox1_TextChanged&quot;); } private void DropDownList1_SelectedIndexChanged( . . . ) { lstEventList.Items.Add(&quot;DropDownList1_SelectedIndexChanged&quot;); }
  • 113. פקדים המאפיין AutoPostBack – המשך דוגמה – המשך : מריצים את האפליקציה , בוחרים ערכים ל - ListBox, DropDownList ול - TextBox , מקליקים על ה - Button , הטופס מורץ לשרת , והתוצאה המתקבלת היא :
  • 114. פקדים המאפיין AutoPostBack – המשך לעיתים נרצה לבצע &quot; ריצה &quot; מיידית לשרת כאשר המשתמש בוחר ערך מפקדי DropDownList , ListBox או מקליד מידע ב - TextBox . כדי שפקדים אלו יבצעו Postback , יש להגדיר את המאפיין AutoPostBack כשווה true . כאשר AutoPostBack=true הפקד &quot; רץ &quot; לשרת מבלי לחכות ל - Button.Click .
  • 115. פקדים המאפיין AutoPostBack – המשך דוגמה – המשך : משנים לפקדים ListBox1, DropDownList ול - TextBox את המאפיין AutoPostBack ל - true . ומריצים פעם נוספת .
  • 116. פקדים המאפיין AutoPostBack – המשך דוגמה – המשך : בחירת ערך ב - ListBox בחירת ערך ב - DropDownList בחירת ערך ב - TextBox
  • 117. פקדים פקדי בחירה - CheckBox מאפשר למשתמש אפשרות בחירה באחד משני מצבים : true או false . סימון הפקד מציין true , ואי סימונו מציין false . ערך ברירת המחדל של המאפיין Checked הוא false . לעיתים קרובות משתמשים בפקד זה כאשר נדרש לאפשר למשתמש אפשרויות בחירה רבות , או המשתמש צריך לענות על שאלה שהתשובה שלה היא כן או לא בלבד . בכל לחיצה על הפקד ערך המאפיין Checked מתחלף . גם לפקד זה מוגדר המאפיין AutoPostBack . WebFormCheckBox.aspx
  • 118. פקדים פקדי בחירה – CheckBox - המשך דוגמה ל - CheckBox בעורך הגראפי : בעורך ה - HTML : <asp:CheckBox id=&quot;CheckBox1&quot; runat=&quot;server&quot;></asp:CheckBox> בדפדפן : <input id=&quot;CheckBox1&quot; type=&quot;checkbox&quot; name=&quot;CheckBox1&quot; />
  • 119. פקדים פקדי בחירה – CheckBox – המשך מאפיינים חשובים : תיאור מאפיין צבע הרקע Backcolor סימון / אי סימון של הפקד Checked סוג הגופן Font צבע הטקסט ForeColor גובה הפקד Height הטקסט שמופיע מעל הפקד Text הצגת הטקסט מימין או משמאל לפקד TextAlign הצגה או הסתרה של הפקד Visible רוחב הפקד Width
  • 120. פקדים פקדי בחירה – RadioButton מאפשר למשתמש לבחור באפשרות אחת בלבד מבין מספר אפשרויות . פקדי RadioButtons מוגדרים בקבוצות , כל פקד בקבוצה מגדיר אפשרות אחת לבחירה . כאשר בוחרים RadioButton אחד מתוך הקבוצה , הוא מקבל את הערך true וכל שאר הפקדים את הערך false . גם לפקד זה מוגדר המאפיין AutoPostBack .
  • 121. פקדים פקדי בחירה – RadioButton - המשך דוגמה ל - RadioButton בעורך הגראפי : בעורך ה - HTML : <asp:RadioButton id=&quot;RadioButton1&quot; runat=&quot;server&quot;> </asp:RadioButton> בדפדפן : <input id=&quot;RadioButton1&quot; type=&quot;radio&quot; name=&quot;RadioButton1&quot; value=&quot;RadioButton1&quot; />
  • 122. פקדים פקדי בחירה – RadioButton - המשך מאפיינים חשובים תיאור מאפיין צבע הרקע Backcolor סימון \ אי סימון של הפקד Checked סוג הגופן Font צבע הטקסט ForeColor גובה הפקד Height הטקסט שמופיע מעל הפקד Text הצגת הטקסט מימין או משמאל לפקד TextAlign הצגה או הסתרה של הפקד Visible רוחב הפקד Width
  • 123. תרגול תרגיל 1 - הצגת תאריך מטרת התרגיל להראות שתי אפשרויות להצגת תאריך . שימוש בפקד תאריך Calendar - בדרך כלל שהתאריך הנבחר הוא בתקופה הקרובה , אם התאריך לא בטווח הקרוב נשתמש ב 3 פקדים : שנה , חודש , יום . שימוש בפקד תאריך Calendar הוסף פקד תאריך Calendar ותווית . בעת לחיצה על התאריך הנבחר הצג את התאריך בתווית . שימוש בפקדי רשימה לקליטת תאריך לידה . הוסף 3 פקדי רשימה שנה , חודש , יום ותווית להצגת החודש הנבחר . לפקד השנה אכלס את הנתונים בעת העלאת הטופס , כתוב מתודה מתאימה והפעל אותה בעת העלאת הטופס . לפקד החודש אכלס את 12 החודשים בזמן עיצוב . פקד יום , מספר הימים יוכנסו לפקד לאחר בחירת השנה והחודש , בהתאם למספר הימים לפי החודש הנבחר . לאחר בחירת התאריך הצג בתווית את תאריך לידה .  
  • 124. תרגול תרגיל 2 - טופס רישום בנה טופס רישום שיכיל את הפרטים הבאים : שם פרטי . שם משפחה . תעודת זהות . מין בחירה בין זכר / נקבה . תאריך לידה . ארץ לידה ( DropDownList ) . שנת עליה - יתווסף לטופס אם המשתמש לא נולד בארץ . מצב משפחתי בחירה מרשימה רווק / נשוי / גרוש / אלמן . רחוב . עיר בחירה מרשימת ערים . כתובת דוא &quot; ל . טלפון טלפון נייד . שם משתמש . סיסמא אימות סיסמא הוסף לחצן אימות פרטים שיציג בתווית את כל הנתונים שנקלטו בטופס . הוסף לחצן &quot; שלח &quot; , בעת הלחיצה ישמרו השם הפרטי והמשפחה ב Session ויעביר לדף חדש שיציג את הברכה שלום ופרטי המשתמש .
  • 125. פקדי אימות פקדי אימות קלט משתמש אימות קלט משתמש ( Validating User Input ) הנו תהליך הבודק האם מידע שהמשתמש הקליד בטופס מתאים לערך הנדרש , לטווח ערכים מוגדר או לתבנית קלט כלשהיא . אימות קלט משתמש מתבצע על ידי השוואה בין קלט מהמשתמש אל מול תבנית קלט נדרשת אשר נקבעה מראש . תבניות הקלט שנקבעו מראש יכולות להגדיר מספר תווים חוקי , שימוש בתווים מסוימים , טווח ערכים לערך שהוקלד או נוסחא מתמטית . לדוגמא : שדה הקולט כתובת EMail אמורה להיות במבנה מוגדר וחוקי . מספר טלפון חייב להכיל רק ספרות ומספר מוגדר וידוע מראש של ספרות .
  • 126. פקדי אימות פקדי אימות קלט משתמש בדיקת החוקיות מתבצעת גם בצד לקוח וגם בצד שרת על פי תרשים הזרימה הנ &quot; ל : התהליך : קלט המשתמש נבדק בצד לקוח , במידה והקלט אינו תואם לתבנית שהוגדרה מראש , שליחת הטופס לשרת תבוטל ויוצגו סמלי שגיאה . במידה והקלט תואם את התבנית , שליחת הטופס לשרת לא תתעכב . בשרת מתבצעת בדיקה נוספת של הקלט . במידה והקלט אינו תואם לתבנית שהוגדרה מראש , עיבוד הטופס בשרת יבוטל והוא יוחזר ללקוח לתיקון הטעויות . במידה והקלט אומת , השרת יוכל לעבד את הבקשה . 1 2 3 4 5 6
  • 127. פקדי אימות פקדי אימות קלט משתמש אימות קלט משתמש מגן על היישום מפני 2 סכנות עיקריות : Spoofing – מתרחש כאשר משתמש מנטרל סקריפטים לולידציה בצד הלקוח ( ע &quot; י נטרול קוד בצד הלקוח שמתבמע בעזרת שינוי הדגרות הדפדפן ). ב - ASP.NET ולידציה של צד הלקוח מתבצעת תמיד שוב בצד השרת –שם המשתמש לא יכול לשנות או לנטרל קוד . Malicious code – מתרחש כאשר משתמש יכול להוסיף טקסט בלתי מוגבל ל - Web Page דרך פקדי קלט שאין להם ולידציה . משתמש יכול לשלוח טקסט עצום שיתקע את השרת או להכניס כל מחרוזת אפשרית שיכולה להיות גם שאילתה ששולפת מידע כלשהו מה - DB או הוספת הרשאות או יצירת Accounts . אימות הקלט מונע &quot; ריצות &quot; מיותרות של הטופס לשרת .
  • 128. פקדי אימות פקדי אימות קלט משתמש בעבר בדיקות תקינות הקלט נכתבו על ידי מפתחי האתר בתסריטים ב - Java Script ( בצד לקוח ), וב - VB Script ( בצד שרת ). ב - ASP.NET בדיקות תקינות הקלט מתבצעות על ידי פקדי צד שרת . הפקד מבצע גם את הבדיקה בצד לקוח , על ידי שתילת קוד שהוא מחולל ב - Java Script ( קוד שמותאם לדפדפן שביקש את הדף ) , ובצד שרת באמצעות C# ( או כל שפה . NET אחרת ). אימות הקלט מתבצע על פי אותה לוגיקה תכנותית גם בצד לקוח וגם בצד שרת . אימות הקלט מתבצע בזמן המעבר מפקד קלט אחד לאחר , פעולה זו מאפשרת למשתמש לקבל משוב מיידי על הקלט שלו מבלי להמתין לשליחת הטופס לשרת .
  • 129. פקדי אימות פקדי אימות קלט משתמש - הרשימה RequiredFieldValidator – בודק האם הוזן ערך כלשהוא בפקד שחייב לקבל ערך . RangeValidator – בודק האם ערכו של פקד מסויים נמצא בטווח ערכים מוגדר . RegularExpressionValidator – בודק האם מבנה המידע שהוקלד בפקד מתאים לתבנית מוגדרת . CompareValidator – השוואת ערכם של שני פקדים . CustomValidator – מאפשר כתיבת קוד בדיקה מותאם אישית . ValidationSummary – מציג סיכום של כל שגיאות אימות הקלט בדף .
  • 130. פקדי אימות פקדי אימות קלט משתמש – הוספת פקד לטופס ההליך הראשוני משותף לכל פקדי אימות הקלט : תהליך הוספת פקד אימות קלט מורכב משלושה שלבים , השניים הראשונים זהים לכל פקדי אימות הקלט , והשלישי שונה מפקד לפקד . מחלון ארגז הכלים גוררים את הפקד לטופס . בוחרים את פקד הקלט שאותו רוצים לבדוק ומעדכנים את מאפייני פקד אימות הקלט , המאפיין ControlToValidate של פקדי אימות הקלט קובע מי הוא הפקד אותו הוא בודק . מגדירים מאפיינים נוספים בפקד אימות הקלט , המאפיינים שונים מפקד לפקד . ניתן לצרף לפקד קלט אחד מס ' פקדי אימות מידע .
  • 131. פקדי אימות פקדי אימות קלט משתמש – הוספת פקד לטופס דוגמה לפקדי אימות ב - HTML : <asp:RequiredFieldValidator ID=&quot;RequiredFieldValidator1“ runat=&quot;server&quot; ControlToValidate=&quot;TextBox1&quot; Display=&quot;Dynamic&quot; ErrorMessage=&quot;Error Message&quot;>*</asp:RequiredFieldValidator> <asp:RangeValidator ID=&quot;RangeValidator1&quot; runat=&quot;server&quot; ControlToValidate=&quot;TextBox1&quot; Display=&quot;Dynamic&quot; ErrorMessage=&quot;RangeValidator&quot; MaximumValue=&quot;100&quot; MinimumValue=&quot;0&quot; Type=&quot;Integer&quot;>R</asp:RangeValidator> פקדי האימות מציגים מחרוזת לשגיאה , ולכן מומלץ להציבם בסמוך לפקד אותו הם בודקים .
  • 132. פקדי אימות פקדי אימות קלט משתמש – RequiredFieldValidator בודק האם הוזן ערך כלשהוא בפקד שחייב לקבל ערך . האימות לא מתבצע רק לגבי פקד ריק אלא גם על פקד המכיל ערך התחלתי שהמשתמש חייב לשנות . מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage טקסט שאפשר לאמת ( אופציונאלי ) InitialValue
  • 133. פקדי אימות פקדי אימות קלט משתמש – RangeValidator בודק האם ערכו של פקד מסויים נמצא בטווח ערכים מוגדר . הערך יכול להיות מספרי , תווי , תאריך או מטבע . מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage הערך המקסימאלי לשדה האימות MaximumValue הערך המינימאלי לשדה האימות MinimumValue סוג הנתונים שצריך לאמת Type
  • 134. פקדי אימות פקדי אימות קלט משתמש – CompareValidator השוואת ערכם של שני פקדים . כדי להשוות מול ערכו שלקבוע בוחרים במאפיין ValueToCompare . כדי להשוות לערך שהוזן בפקד אחר בוחרים במאפיין ControlToCompare . מאפיינים חשובים : תיאור מאפיין שדה ההשוואה ControlToCompare השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage סוג ההשוואה Operator השוואה לקבוע ValueToCompare סוג הנתונים של הבדיקה Type
  • 135. פקדי אימות פקדי אימות קלט משתמש - RegularExpressionValidator בודק האם מבנה המידע שהוקלד בפקד מתאים לתבנית מוגדרת . פקד זה משווה את התווים , הספרות והסימנים שהוקלדו לתבנית מוגדרת , לדוגמא : E-Mail , מס ' טלפון , מיקוד וכו '. מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage תבנית האימות ValidationExpression
  • 136. דוגמאות לשימוש בפקדי אימות אם רוצים לבדוק שהשדות &quot; סיסמא &quot; ו &quot; אימות סיסמא &quot; זהים יש להשתמש בפקד : CompareValidator . עבור תיבת כתובת E-MAIL עלינו לבנות תבנית נכונה כמו למשל someone@sometime.com , נשתמש בפקד RegularExpressionValidator לבצע אימות זה ע &quot; י התבנית : \w+\@\w+\.com - או אחת או יותר ולאחריה התו @ ולאחריו אות אחת או יותר ולבסוף המחרוזת com . . w - מציין אות . + - הופעה אחת או יותר של תו . * - אפס הופעות או יותר של תו . ? - אפס הופעות או להופעה יחידה של תו .
  • 137. פקד RegularExpressionValidator לאימות ע &quot; י תבנית הכנסת מספר בין 5 ספרות [0-9]{5} או {5} \d הכנסת מספר בין 6 ל -8 ספרות {6,8} \d הכנסת מספר שלם שמכיל לפחות ספרה אחת [0-9]+ ניתן לציין תבניות מרובות להתאמה בפקד זה ע &quot; י שימוש בסימן | ( or ) במאפיין ValidationExpression , לדוגמא המחרוזת הבאה מתאימה לכל מספרי בטלפון הכוללים 9 ספרות וקו הפרדה אחד ( עבור מספר טלפון ) או מספר טלפון הכולל 9 ספרות עם קו הפרדה ( עבור מספר טלפון נייד ). (([0]{1}[2,3,4,8,9]{1}-[0-9]{7}) | ([0]{1}[5]{1}[0,2,4,7]{1}-[0-9]{7})) המשתמש יכול להזין כל אחד מהמספרים הבאים : 03-4589865 052-458986 שימו לב ! רק פקד RequiredFieldValidator מתייחס לשדה ריק כשדה לא תקין , כל הפקדים האחרים מקבלים שדות ריקים , ז &quot; א שכל שדה חובה יש להוסיף פקד RequiredFieldValidator בנוסף לפקדי האימות הנוספים .
  • 138. פקד CompareValidator פקד זה משווה את הערך שהוזן לערך קבוע , לערך מאפיין של פקד מסוים . האופרטור DataTypeCheck - בודק אם הנתון הוא מסוג נתונים מסויים ( string,integer,double וכד '). ניתן להכניס במאפיין Type את הפרמטרים : מחרוזות , מספרים שלמים , ערכים בעלי גודל כפול , תאריך , מטבע . כדי להשוות מול ערך קבוע , יש לשנות את המאפיין ControlToCompare ל – ValueToCompare . אם רוצים לבדוק שהשדות &quot; סיסמא &quot; ו &quot; אימות סיסמא &quot; זהים יש להשתמש בפקד זה .
  • 139. פקדי אימות פקדי אימות קלט משתמש – CustomValidator מאפשר כתיבת קוד בדיקה מותאם אישית . נשתמש בו כאשר נדרש לכתוב קוד אימות קלט מותאם . כאשר אף אחד מפקדי אימות הקלט האחרים אינם מספקים מענה מתאים , לדוגמה : בדיקת ספרת ביקורת של מספר זהות . מאפיינים חשובים : תיאור מאפיין השדה שעליו מתבצע האימות CotrolToValidate ההודעה כאשר השדה לא אומת ErrorMessage להפעלת קוד האימות OnServerValidate
  • 140. דוגמא לפקד CustomValidator לדוגמא בדיקת תקינות תעודת זהות – ספרת ביקורת . הוסף פקד CustomValidator לחיצה כפולה על הפקד תפתח מתודה , נוסיף את הבדיקה . לפקד CustomValidator יתווסף קישור ברשימת האירועים ל - .serverValidate בדיקת תקינות תעודת הזהות בשקף הבא
  • 141. דוגמא לפקד CustomValidator בדיקת תקינות תעודת זהות תעודת הזהות מכילה 9 ספרות הכולל 8 ספרות + ספרת ביקורת לדוגמא : 051938991. ספרת הביקורת ( הימנית ביותר ) היא פונקציה של 8 הספרות . כיצד מתבצעת הבדיקה הכפל כל ספרה מ -8 הספרות בצורה הבאה : 12121212 05193899 אם סכום הספרות מעל 9 סכם את הספרות , סכם את כל הספרות , ספרת הביקורת היא ההשלמה לעשרת הקרובה . 0* 1 +5* 2 +1* 1 +9* 2 +3* 1 +8* 2 +9* 1 +9* 2=0+1+1+ 9 +3+ 7 +9 +9 =39 המספר 39 ולכן ספרת הביקורת היא 1 ( אם סכום הספרות היה 37 ספרת הביקורת היתה 3). בדוק אם מספר תעודת הזהות 022875942 תקין . 9* 2=18=1+8= 9 8* 2=16=1+6= 7
  • 142. הצגת סיכומי אימות עד כה מיקמנו את הודעות השגיאה מייד לאחר פקדי השרת שאומתו , הדבר שימושי כשרוצים לומר להשתמש איזה פקד מכיל שגיאות , במיוחד באימות בצד הלקוח . אך לא תמיד זה המקום האידיאלי למקם הודעות שגיאה , יש מספר אפשרויות למיקום הודעות .
  • 143. הצגת סיכומי אימות אפשרויות למיקום הודעות שגיאה In-line – באותו מקום בו נמצא פקד האימות בפריסת הדף . Summary - כל השגיאות בסיכום נפרד . - In-line and Summary הודעות השגיאה המתאימות יכולות להיות שונות . Customized – מעבר על כל הפקדים בלולאה ( שקופית 12) שיטת הסיכום שימושית כשנרצה למקם את כל הודעות השגיאה במקום אחד .
  • 144. פקדי אימות פקדי אימות קלט משתמש – ValidationSummary מציג סיכום של כל שגיאות אימות הקלט שנתגלו בדף . על מנת להשתמש בו כל שצריך לעשות הוא רק להציב אותו על הטופס .
  • 145. פקדי אימות - פקד ValidationSummary במקום להציג את כל ההודעות במקום אחד , נוכל להשתמש בפקד ValidationSummary פקד זה מציג הודעות שגיאה במבנה מוגדר במקום מסויים בדף . פקד זה מלקט את הודעות השגיאה מכל הפקדים האחרים בדף ומציג אותן במקום אחד . ניתן להשתמש ב – DisplayMode כדי להציג את ההודעות כרשימת תבליטים ע &quot; י ציון BulleList או במבנה פיסקה Paragraph Single ההודעות המוצגות בפקד הן אילו המצוינות במאפיין ErrorMessage בפקדי האימות . כדי לשנות את ההודעה המוצגת במקום , השתמש במאפיין Text . אם אינך רוצה להציג את הודעות השגיאה במקום , שנה את המאפיין Display בפקד ל – none
  • 146. הצגת הודעות שגיאות בתיבת דו - שיח ע &quot; י הוספת המאפיין ShowMessageBox באפשרותנו ליצור תיבת הודעה עם הפקד ValidationSummary .
  • 147. פקדי אימות פקדי אימות קלט משתמש – בדיקות בצד שרת ניתן להשתמש במאפיין Page.IsValid על מנת לבדוק בצד שרת האם כל ערכי הפקדים תקינים . המאפיין Page.IsValid יחזיר true רק אם כל פקדי האימות אומתו בהצלחה ( מחזירים true ). לדוגמה : protected void Button1_Click(object sender, EventArgs e) { if (Page.IsValid) { obj.DoSomething(); } }
  • 148. פקדי אימות פקדי אימות קלט משתמש – בדיקות בצד שרת במקום לבדוק את כל פקדי האימות כמקשה אחת , ניתן לבדוק פקד פקד : protected void Button1_Click(object sender, EventArgs e) { if (RequiredFieldValidator1.IsValid) { obj.DoSomething(); } }
  • 149. תרגול תרגיל 3 - טופס רישום ( פקדי אימות ) הוסף לטופס הרישום פקדי אימות לפי הפירוט הבא : ( שדות חובה מסומנות ב -*) שם פרטי *. שם משפחה *. תעודת זהות * – 9 ספרות , כולל בדיקה ספרת ביקורת . מין * בחירה בין זכר / נקבה . תאריך לידה – 3 פקדי רשימה שנה , חודש , יום . ( לאחר בחירת החודש יש לאכלס את הימים באותו חודש ברשימה לפי מספר החודש והשנה – לחודש פברואר ) מצב משפחתי בחירה מרשימה רווק / נשוי / גרוש / אלמן . רחוב . עיר בחירה מרשימת ערים . כתובת דוא &quot; ל – בדיקת חוקיות , כתובת תקינה .
  • 150. תרגול תרגיל 3 - טופס רישום ( פקדי אימות ) המשך טלפון – תבנית 0x-xxxxxxx טלפון נייד – קידומת בחירה מרשימה , ומספר בין 7 ספרות . שם משתמש – 6-8 תווים , חובה להתחיל באות . סיסמא – לפחות 5 תווים , אם הקשת הסיסמא יוצג *.( מאפיין TextMode=Password ) אימות סיסמא – בדיקה מול הסיסמא שהוקלדה . הוסף פקד &quot; שלח &quot; הצג הודעה אם כל השדות הוקלדו כנדרש . תרגיל 4 הוסף לטופס הרישום פקד ValidationSummary . הוסף לטופס הרישום הודעת MessageBox אם האימות לא תקין .
  • 151. פקדים פקדי מכולה - Table פקד השרת Table מאפשר ליצור טבלה הניתנת לתכנות ולהצגה בדף האינטרנט . בניית הפקד יכולה להתבצע בזמן העיצוב , אולם כוחו ועוצמתו האמיתיים של הפקד הם בהיותו ניתן לתכנות בזמן הריצה . בעורך הגראפי : בעורך ה - HTML : <asp:Table id=&quot;Table1“ runat=&quot;server&quot;></asp:Table>
  • 152. פקדים פקדי מכולה - Table - המשך כדי להגדיר פקד Table יש ליצור שורות ( TableRow ) ותאים TableCell) ). בעת הפעלת דף האינטרנט הופכות פקודות הפקד Table לתגיות הטבלה המוכרות מ - HTML דהיינו ,table ,tr ו - td מאפיינים חשובים : תיאור מאפיין הצגה - הסתרה של קווי הרשת של הפקד GridLines יישור אופקי לתכולת הפקד HorizontalAlignment להוספת שורות ותאים לטבלה Rows
  • 153. פקדים פקדי מכולה - Table - המשך דוגמה , יצירת טבלה בזמן ריצה : Button btn; for (int j = 0; j < ROWS ; j++) } TableRow row = new TableRow(); for (int i = 0; i < CELLS; i++) } TableCell cell = new TableCell(); cell.BorderWidth = 2; btn = new Button(); btn.Width = 40; btn.Height = 30; btn.Text = (i * j).ToString(); btn.BackColor = Color.Blue ; cell.Controls.Add(btn); row.Cells.Add(c); } Table1.Rows.Add(row); } WebFormTable.aspx
  • 154. פקדים פקדי מכולה - Panel פקד ה - Panel נועד לשמש כמכולה לפקדים אחרים . השימוש בו יוצר מראה נפרד וברור לכל קבוצת פקדים . הכלת הפקדים בתוך ה - Panel עוזרת לנו להשתמש בהם כיחידה אחת ולהציגם בצורה מסודרת על הטופס . דוגמת HTML : <asp:panel id=&quot;Panel1“ runat=&quot;server&quot;>Panel</asp:panel>
  • 155. פקדים פקדי מכולה - Panel - המשך לעיתים קרובות משתמשים בו כדי להציג או להסתיר קבוצה שלמה של פקדים . הפקד מאוד עוזר בזמן העיצוב . כאשר צריכים להעביר קבוצה של פקדים ממקום אחד בטופס לאחר או למחוק את כל הפקדים באותה קבוצה . כאשר הוא מועבר ללקוח הוא מתורגם ומוצג בדפדפן ( explorer ) כתגית ה HTML <div> .
  • 156. פקדים כריכת מידע ASP.NET מציעה לשימוש גלריה של פקדים שמטרתם להציג ישירות מידע הקיים במקור מידע . פקדים אלו מתחברים למקור מידע באמצעות מאפיינים ומציגים אותו בטופס . הם מקושרים למקור המידע ישירות . ASP.NET משלבת את המידע בפקדים אלו באופן אוטומטי . פקדי ה - List-Bound : DropDownList , ListBox , CheckBoxList , RadioButtonList , DataGrid , DataList , Repeater. WebFormViewControls.aspx
  • 157. פקדים כריכת מידע – DataGrid נשתמש בפקד זה כאשר יש צורך להציג נתונים של מקור המידע טבלאי . כברירת מחדל הוא מציג את הנתונים לקריאה בלבד . ניתן להוסיף לא אפשרות בחירת שורה , מחיקת שורה ועריכת שורה . ניתן להוסיף לו פקדים אשר יציגו את המידע כדי שניתן יהיה לערוך אותם . ב - HTML : <asp:DataGrid id=&quot;DataGrid1“ runat=&quot;server&quot;></asp:DataGrid> WebFormViewControls.aspx
  • 158. פקדים כריכת מידע – DataGrid כל רשומה מוצגת כשורה וכל שדה מוצג כעמודה . הפקד מציג בצורה אוטומטית את המידע השמור במקור המידע . כדי לשלוט בהצגת השדות נשנה את ערך המאפיין AutoGenerateColumn ל - false . באמצעות DataGrid נוכל לחלק מידע גדול לעמודים בצורה פשוטה ( paging ). ניתן למיין את הנתונים בלחיצה על כפתור .
  • 159. פקדים כריכת מידע – DataGrid - דוגמה OleDbConnection conn=new OleDbConnection(); OleDbCommand cmd= new OleDbCommand(); conn.ConnectionString=@&quot;Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=“ ; conn.ConnectionString +=Server.MapPath(&quot;school.mdb&quot;); string SqlStr=&quot;select * from Student&quot;; cmd.CommandText=SqlStr; cmd.Connection=conn; OleDbDataAdapter da=new OleDbDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); DataGrid1.DataSource=ds; DataGrid1.DataBind(); מחרוזת החיבור הגדרת אובייקט החיבור יצירת משפט SQL חיבור ה - DataSet ל - DataGrid הגדרת DataSet וטעינתו בטבלה הגדרת Adapter
  • 160. פקדים כריכת מידע – DataGrid מאפיינים חשובים : תיאור מאפיין האם לאפשר חלוקה לדפים AllowPaging האם לאפשר מיון הנתונים AllowSorting שינוי מאפייני עיצוב הפריטים לסירוגין AlternatingItemStyle קובע אם להציג את כל העמודות באופן אוטומטי AutoGenerateColumns שהערך הזה הוא המפתח . DataGrid הודעה ל '' DataKeyField DataSet איבר של מקור הנתונים למשל טבלה מה ' DataMember DataSet מקור הנתונים למשל DataSource viewstate האם לשמור את מצב הפקד ב - EnableViewState מספר הפריטים בדף אחד PageSize
  • 161. פקדים כריכת מידע – DataList כמו קודמו , מיועד להציג נתונים ממקור מידע טבלאי . מציג את המידע בצורה של תבניות ( (Templates שהוגדרו מראש . אפשר להשתמש בו כדי לאפשר למשתמשים שינוי ומחיקת נתונים . אפשר להציג את הנתונים ביותר מעמודה אחת באמצעות המאפיין RepeatColumns . ב - HTML <asp:DataList id=&quot;DataList1“ runat=&quot;server&quot;> </asp:DataList>
  • 162. פקדים כריכת מידע – DataList על מנת להציג את הנתונים חובה להגדיר תבנית אחת לפחות . בדרך כלל משתמשים בתבנית ItemTemplate . התבניות של הפקד DataList : . HeaderTemplate : הכותרת העליונה . ItemTemplate : עיצוב הנתונים . AlternateItemTemplate : עיצוב השורות הזוגיות . SeparatorTemplate : הפרדה בין השורות . FooterTemplate : הכותרת התחתונה . SelectedItemTemplate : עיצוב הפריט הנבחר . EditItemTemplate : עיצוב הפריטים במצב העדכון .
  • 163. פקדים כריכת מידע – DataList - המשך צעדים בהגדרת הפקד : גישה למסד נתונים ובניית DataSet המכיל את הנתונים הנדרשים להצגה . קישור ה - DataSet לפקד , בדיוק כמו עם DataGrid : על מנת שהפקד יציג את הנתונים נדרש להגדיר לפחות תבנית אחת . החיוני ביותר הוא להגדיר את התבנית ItemTemplate על מנת לקבוע כיצד יוצגו הנתונים . ניתן לבנות ולהגדיר עוד תבניות , כגון : תבנית להצגת הכותרת העליונה והתחתונה , תבנית המעצבת את שורות הנתונים הזוגיות וכו ' . DataSet ds = new DataSet(); oleDbDataAdapter1.Fill(ds); Datalist1.DataSource=ds; Datalist1.DataBind();
  • 164. פקדים כריכת מידע – DataList - המשך צעדים בהגדרת הפקד – קביעת תבנית : <asp:datalist id=&quot;DataList1&quot; runat=&quot;server&quot; RepeatColumns=&quot;2&quot; DataKeyField=&quot;id&quot;> <ItemTemplate> <asp:LinkButton id=&quot;Linkbutton2“ runat=&quot;server&quot;> <%# DataBinder.Eval(Container.DataItem, &quot;fName&quot;) %> </asp:LinkButton> <%# DataBinder.Eval(Container.DataItem, &quot;lName&quot;)%> </ItemTemplate> </asp:datalist> מספר עמודות תצוגה תבנית הצגת הנתונים קישור השדה fName קישור השדה lName
  • 165. פקדים כריכת מידע – DataList - המשך מאפיינים חשובים : תיאור מאפיין שינוי מאפייני עיצוב הפריטים לסירוגין AlternatingItemStyle צבע הרקע Backcolor שהערך הזה הוא המפתח . DataGrid הודעה ל '' DataKeyField DataSet איבר של מקור הנתונים למשל טבלה מה ' DataMember DataSet מקור הנתונים למשל DataSource viewstate האם לשמור את מצב הפקד ב - EnableViewState סוג הגופן Font הצגה \ הסתרה של קווי הרשת . GridLines מספר העמודות שצריך להציג . RepeatColumns
  • 166. פקדים כריכת מידע – Repeater Repeater הוא הפקד הפשוט ביותר מבין פקדי כריכת מידע . הוא גם הגמיש ביותר מביניהם , מוגדר באמצעות תגיות HTML . יתרונו שהוא צורך הכי פחות משאבים בעת הצגת הנתונים . ב - HTML - <asp:Repeater id=&quot;Repeater1&quot; runat=&quot;server&quot;></asp:Repeater>
  • 167. פקדים כריכת מידע – Repeater - המשך ל - Repeater יש גם חסרונות : אינו יורש את המחלקה WebControl , לכן הוא לא מכיל את מאפייני עיצוב כמו DataList ו - DataGrid . תוכן העיצוב מוגדר ידנית בעזרת תגיות HTML . דורש כתיבה של קוד מורכב כאשר מעוניינים למיין או לחלק את המידע לעמודים . מוגבל במספר וביכולת האירועים . מכיל פחות תבניות עיצוב .
  • 168. פקדים כריכת מידע – Repeater - המשך כמו ב - DataList גם ה - Repeater מוגדר באמצעות תבניות . התבניות של הפקד Repeater : . HeaderTemplate : כותרת העליונה . ItemTemplate : עיצוב הנתונים ( חובה להשתמש ). AlternateItemTemplate : עיצוב השורות הזוגיות . SeparatorTemplate : הפרדה בין השורות . FooterTemplate : כותרת התחתונה .
  • 169. פקדים כריכת מידע – Repeater – המשך צעדים בהגדרת הפקד : גישה למסד נתונים ובניית DataSet המכיל את הנתונים הנדרשים להצגה . קישור ה - DataSet לפקד , בדיוק כמו עם DataGrid : על מנת שהפקד יציג את הנתונים נדרש להגדיר לפחות תבנית אחת . החיוני ביותר הוא להגדיר את התבנית ItemTemplate על מנת לקבוע כיצד יוצגו הנתונים . ניתן לבנות ולהגדיר עוד תבניות , כגון : תבנית להצגת הכותרת העליונה והתחתונה , תבנית המעצבת את שורות הנתונים הזוגיות וכו ' . DataSet ds = new DataSet(); oleDbDataAdapter1.Fill(ds); Repeater1.DataSource=ds; Repeater1.DataBind();
  • 170. פקדים כריכת מידע – Repeater – המשך צעדים בהגדרת הפקד – קביעת תבנית : <asp:Repeater id=&quot;Repeater1&quot; runat=&quot;server&quot;> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, &quot;fName&quot;) %> <%# DataBinder.Eval(Container.DataItem, &quot;lName&quot;)%> </ItemTemplate> </ asp:Repeater > קישור השדה lName קישור השדה fName תבנית הצגת הנתונים
  • 171. פקדים כריכת מידע – Repeater – המשך לפקד Repeater יש בסה &quot; כ 5 מאפיינים : תיאור מאפיין DataSet איבר של מקור הנתונים למשל טבלה מה ' DataMember DataSet מקור הנתונים למשל DataSource Viewstate האם לשמור את מצב הפקד ב - EnableViewState הצגה \ הסתרה של הפקד . Visible
  • 172. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 173. פקדים מותאמים אישית User Controls פקדי משתמש הם תוספות מבורכות ביישומי ASP.NET , מאפשרים לעשות שימוש חוזר במרכיבי עיצוב ופונקציונאליות . דוגמה : תפריט ראשי של אתר מופיע בכל אחד מדפי האתר , ניתן להגדירו כפקד משתמש ולגרור אותו לכל הטפסים של היישום , הפקד מגדיר את המראה הויזואלי של התפריט אולם מטפל גם באירועים הפנימיים שלו , בכך נחסכת מאיתנו טירחה רבה .
  • 174. פקדים מותאמים אישית User Controls User Controls הם דפי ASP.NET בעל סיומת .ascx הם פקדי שרת לכל דבר ועניין . בנויים מאוסף פקדים . פקדי משתמש בנויים מ - HTML ומקוד בשפת C# ( בדיוק כמו דפי aspx ). ניתן לגרור אותם כפקדי שרת לתוך טפסי ASP.NET . ניתן לשימוש בכל אחד מדפי היישום . הם לא עומדים בפני עצמם , הם חייבים להיות חלק מדף aspx . מכיוון שהם נחשבים כחלק מה - Web Form , ולא כדף עצמאי הם לא מכילים את התגיות < HEAD> , <BODY > או <FORM> .
  • 175. פקדים מותאמים אישית User Controls שלבים ביצירת ושימוש בפקד משתמש : בחלון ה - Solution Explorer מציבים את סמן העכבר מעל שם הפרוייקט , הקלקה ימנית -> Add -> Add Web User Control . לפרוייקט התווסף דף ascx . עיצוב הפקד וכתיבת הקוד המטפל באירועים בדיוק כמו בדפי aspx . גרירתו מתוך חלון ה - Solution Explorer לתוך דף aspx .
  • 176. פקדים מותאמים אישית User Controls כמו שדף aspx מכיל Page Directive המכיל הנחיות שפה , CodeBehind וכו ' , דף ascx מכיל Control Directive : <%@ Control Language=&quot;c#&quot; AutoEventWireup=&quot;false&quot; Codebehind=&quot;MyControl.ascx.cs&quot; Inherits=&quot;WebApplication1.MyControl&quot; TargetSchema=&quot;http://schemas.microsoft.com/intellisense/ie5&quot;%> הדף עצמו מכיל הגדרות HTML : <TABLE cellSpacing=&quot;1&quot; cellPadding=&quot;1&quot; width=&quot;300&quot; border=&quot;1&quot; id=&quot;Table1&quot;> <TR> <TD> <asp:TextBox id=&quot;TextBox1&quot; runat=&quot;server&quot;></asp:TextBox> <asp:Button id=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;Button&quot;></asp:Button> </TD> </TR> . . . </TABLE>
  • 177. פקדים מותאמים אישית User Controls כאשר גוררים User Control לדף aspx מתווסף לדף הגדרת Register , רישום הפקד בדף : <%@ Register TagPrefix=&quot;uc1&quot; TagName=&quot;MyControl&quot; Src=&quot;MyControl.ascx &quot; %> הפקד מופיע כפקד מן המניין : <uc1:MyControl id=&quot;MyControl1&quot; runat=&quot;server&quot;> </uc1:MyControl>
  • 178. מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) .
  • 179. שמירת מצב ( State ) שרת Web הוא חסר מצב ( Stateless ) , מה שאומר שאחרי יצירת התגובה ( Response ) השרת אינו שומר שום מידע . כל האובייקטים שהשרת הקצה עבור יצירת התגובה נהרסים , כולל כל המידע שהמשתמש שלח לשרת בבקשה ( Request ) וכולל כל המידע שהשרת יצר בתהליך העיבוד . ניתן לומר שלאחר העברת התגובה ללקוח השרת מאבד ענין בלקוח , מנתק את התקשורת עימו והורס את כל האובייקטים והמידע הקשורים בו . אולם , לעיתים היישום מעוניין לשמור נתונים קודמים שהיו בדף לפני שליחתם לשרת . לדוגמה : אנו מעוניינים לספור את מספר הבקשות של הלקוח , במידה וערכו של המונה לא יוכל להשמר בין הבקשות , יהיה ערכו שווה תמיד ל -1. לצורך פתרון בעיה זו נוצרו אובייקטים מיוחדים שכל תפקידם לשמור על המידע בין הבקשות .
  • 180. שמירת מצב ( State ) פותחו מספר שיטות שניתן לחלקם לשני סוגים עיקריים : הראשונה מכילה טכניקות לשמירת המידע בצד הלקוח , השניה מכילה טכניקות לשמירת המידע בצד השרת . שמירת מידע בצד לקוח Cookies Query String ViewState שמירת מידע בצד שרת Application Session Cache
  • 181. שמירת מצב ( State ) שמירת מידע בצד לקוח – Cookies כאשר אנחנו גולשים באינטרנט חלק מהאתרים בהם אנחנו מבקרים שותלים אצלנו על הדיסק הקשיח קבצי טקסט קטנים כדי לשמור נתונים לצורך השימוש בעת הביקור החוזר באתר . קבצים אלה נקראים Cookies ( עוגיות ) ומשמשים לשמירת מידע במחשב הלקוח . ה - Cookies הם קבצי טקסט פשוטים ואינם תוכניות או קבצי קוד שיכולים לפעול במחשב שלנו . בהרבה מקרים זה יעיל ובעיקר כאשר יש צורך בהזנת מידע בכל כניסה לאתר , במקרה כזה האתר מקבל את המידע מהעוגיות וכך חוסך לנו זמן יקר .
  • 182. שמירת מצב ( State ) שמירת מידע בצד לקוח – Cookies עוגיות יכולים לשמור רק מידע טקסטואלי , אם נרצה לאחסן ערך מספרי , נצטרך להמיר אותו לערך טקסטואלי . הלקוח יכול באמצעות הגדרות של הדפדפן למנוע כניסת עוגיות למחשבו ובכך מונע מאיתנו להשתמש בהם . הלקוח יכול למחוק את העוגייה בכל עת . Client Server Request (include Cookies) Response (include Cookies) Cookies
  • 183. שמירת מצב ( State ) שמירת מידע בצד לקוח – Cookies השימוש בעוגיות ב - ASP.NET מתבצע בעזרת המחלקה HttpCookie המוגדרת במרחב השמות System.Web . דוגמה לקוד פשוט ליצירה ושמירת עוגייה בדפדפן : HttpCookie cookie = new HttpCookie(&quot;MyCookie&quot;); cookie[&quot;Name&quot;] = &quot;MyNameISCookie&quot;; cookie.Expires =DateTime.Now.AddDays(3); Response.Cookies.Add(cookie); הגדרת זמן פקיעת העוגייה הצבת ערך לעוגייה יצירת העוגייה העוגייה אינה נשלחת מיידית אלא היא מצורפת לתגובת השרת . על פי הקוד העוגייה נשמרת למשך שלושה ימים ואז היא פגת תוקף . לא חובה להגדיר Cookie.Expires , אולם אז העוגייה נשמרת בזיכרון רק עד לסיום ה - Session .
  • 184. שמירת מצב ( State ) שמירת מידע בצד לקוח – Cookies דוגמה לקריאת מידע מהעוגייה : if (Request.Cookies[&quot;MyCookie&quot;] != null) Label1.Text =Request.Cookies[&quot;MyCookie&quot;].Value; else Label1.Text =&quot;no cookie&quot;; בדיקה האם העוגייה קיימת הצגת ערך העוגייה בתוך Label אם ננסה לקרוא מעוגייה שלא קיימת בדפדפן או שהיא פגת תוקף נקבל הודעת שגיאה , לכן נחוץ לבדוק האם העוגייה קיימת לפני הצגת הערכים שלה .
  • 185. שמירת מצב ( State ) שמירת מידע בצד לקוח – Cookies ה - Cookies מאוחסנים בתיקיה : C:\Documents and Settings\Administrator
  • 186. שמירת מצב ( State ) שמירת מידע בצד לקוח – Cookies מאפיינים חשובים : Name שם העוגייה . Value ערך העוגייה . Values . אוסף הערכים / מפתחות של העוגייה HasKeys מקבל את הערך true אם העוגייה מכילה מפתחות ( keys ). Domain הדומיין שאליו שייכת העוגייה . Expires תאריך תפוגת העוגייה . Path המסלול אליו מועברת העוגייה .
  • 187. שמירת מצב ( State ) שמירת מידע בצד לקוח – Cookies חסרונות : משתמשים יכולים למנוע שמירת Cookies במחשבם . לא ניתן להסתמך על קיומם של ה - Cookies , המשתמשים יכולים למחוק אותם בכל רגע נתון . Cookies נשמרים כקובץ text ולכן אמינותם מוגבלת .
  • 188. שמירת מצב ( State ) שמירת מידע בצד לקוח – Query String Query strings היא דרך מקובלת להעברת מידע בין דפי האינטרנט של אותו היישום . אפשר להעביר נתונים בקלות מדף אחד לאחר אולם כמות המידע המועבר מוגבלת ותלויה בדפדפן . Query String מתחילה בסמן השאלה '?' מיד אחרי כתובת ה - URL . Client Server QsTest.aspx?x=5
  • 189. שמירת מצב ( State ) שמירת מידע בצד לקוח – Query String המידע נשלח לשרת ע &quot; י שרשורו לכתובת ה - URL . המידע מוגדר בזוגות , מפתח ואחריו ערך : http://www.mysite.co.il?data1=12 ניתן לשלוח יותר מאשר פרמטר בודד , ההפרדה בין הפרמטרים מתבצעת באמצעות הסימן '&' : http://www.mysite.co.il?data1=12&data2=13
  • 190. שמירת מצב ( State ) שמירת מידע בצד לקוח – Query String ישנם שתי שיטות עיקריות להעברת מידע ב - Query String . הראשונה , העברת פרמטרים שמכילים את המידע ע &quot; י שרשורם לכתובת ה - URL . השניה , שימוש ב - StringBuilder על מנת ליצור את הפרמטרים : Response.Redirect(&quot;TestQueryString.aspx?Name=n”); Response.Redirect(&quot;TestQueryString.aspx?FName=fn&LName=ln”); StringBuilder qs = new StringBuilder(); qs.Append(&quot;TestQueryString.aspx&quot;); qs.Append(&quot;?MyStr=&quot;); qs.Append(&quot;MyName&quot;); qs.Append(&quot;&MyInt=&quot;); qs.Append(95); Response.Redirect(qs.ToString());
  • 191. שמירת מצב ( State ) שמירת מידע בצד לקוח – Query String חסרונות : כמות התווים מוגבלת על ידי הדפדפן . המידע חשוף , לא ניתן להסתירו , אלא רק להצפינו בעת הצורך . המידע לא נשמר לאחר סיום ה - Session .
  • 192. שמירת מצב ( State ) שמירת מידע בצד לקוח – ViewState כדי להבין מהו ViewState ומה הצורך בו , נקרא את הקטע הבא : משתמש רצה להירשם לאתר שמנהל השמת עובדים לחברות הייטק . המשתמש נתבקש למלא את קורות החייו . אחרי כחצי שעה כשסיים את מילוי הטופס , נשם לרווחה ולחץ על כפתור Submit . איתרע מזלו והוא טעה באחד השדות , השרת החזיר לו את הדף עם בקשה שימלא את הפרטיו מחדש ! עצוב , כעוס וזעוף הוא . . . בעיות : 1 – חוסר נוחות ללקוח . 2 – העמסת השרת בבדיקות מיותרות . 3 – העמסת נפח תקשורת מיותר
  • 193. שמירת מצב ( State ) שמירת מידע בצד לקוח – ViewState כברירת מחדל , תקשורת אינטרנטית היא חסרת מצב Stateless ולכן המידע של הפקדים הולך לאיבוד כאשר הטופס רץ לשרת . וראה זה פלא , ב - ASP.NET הפקדים שומרים על המידע שלהם באופן אוטומטי לחלוטין . דף aspx משתמש במאפיין ViewState שתפקידו לשמור את הערכים של מאפייני פקדי השרת שנמצאים על ה - WebForm . ניתן לשמור ב - ViewState כל אובייקט אחר , לדוגמה : ViewState[“BckClr”] = “Yellow”; המידע נשמר בדף HTML שנשלח ללקוח בפקד HIDDEN . מכיוון שהמידע נשמר בדף עצמו הוא יאבד כאשר הלקוח יופנה לדף אחר .
  • 194. שמירת מצב ( State ) שמירת מידע בצד לקוח – ViewState דוגמה : <form name=&quot;Form1&quot; method=&quot;post&quot; action=&quot;WebForm1.aspx&quot; id=&quot;Form1&quot;> <input type=&quot;hidden&quot; name=&quot;__VIEWSTATE&quot; value=&quot;dDwtMzM0ODUxNTMwOzs+Qa+5cYHdu9SlrO7i435C3a2T36E=&quot; /> <input type=&quot;submit&quot; name=&quot;Button1&quot; value=&quot;Button&quot; id=&quot;Button1&quot; /> <input name=&quot;TextBox1&quot; type=&quot;text&quot; id=&quot;TextBox1&quot; /> </form> השדה הנסתר ViewState ערך השדה הנסתר הטופס אחרי ההרצה
  • 195. שמירת מצב ( State ) שמירת מידע בצד לקוח – ViewState במידה ולא מעוניינים ש - ViewState ישמור את ערכיו של פקד מסויים , ניתן להגדיר זאת באמצעות המאפיין : EnableViewState = false במידה ולא מעוניינים בשמירת מצב של כל פקדי ה - Form , ניתן להגדיר : EnableViewState = false ב - Page Directive .
  • 196. שמירת מצב ( State ) שמירת מידע בצד לקוח – ViewState דוגמה נוספת המדגימה שימוש ב - ViewState על מנת למנות את מספר ה - Round Trip של טופס מסויים : if(!Page.IsPostBack) ViewState[&quot;counter&quot;]=1; else ViewState[&quot;counter&quot;]=int.Parse(ViewState[&quot;counter&quot;] .ToString())+1; this.labelCounter.Text=ViewState[&quot;counter&quot;].ToString();
  • 197. שמירת מצב ( State ) ערך ה ' ViewState נשלח בחזרה לשדה הנסתר _VIEWSTATE השרת מעבד את הנתונים ומעדכן את ה ' ViewState _ VIEWSTATE HTML דף PostBack השדה הנסתר _VIEWSTATE HTML ערך ה ' _ VIEWSTATE נשלח לשרת
  • 198. שמירת מצב ( State ) שמירת מידע בצד שרת – Application האובייקט Application מאפשר מידע משותף לכל הלקוחות הנמצאים כרגע באתר . האובייקט Application הוא בעצם מופע מהמחלקה System.Web.HTTPApplication . מיועד בעיקר לשמירת נתונים קטנים או בינוניים , לאובייקטים גדולים עדיף להשתמש באובייקט Cache . דוגמא שכיחה לשימוש באובייקט היא הצבת מונה מבקרים ( COUNTER ) באתר .
  • 199. שמירת מצב ( State ) שמירת מידע בצד שרת – Application האובייקט Application שוכן בזיכרון השרת . Request Object Response Object Application Object Client Server
  • 200. שמירת מצב ( State ) שמירת מידע בצד שרת – Application כדי לשמור מידע חדש נשתמש בהוראה הבאה : דוגמא : אפשר גם : דוגמא : Application.Add(“ מפתח ” , ערך האובייקט ) Application[&quot;counter&quot;]=0; Application[ שם האובייקט &quot; &quot;]= ערך האובייקט Application.Add(“ Name ”, “MyName” )
  • 201. שמירת מצב ( State ) שמירת מידע בצד שרת – Application איחזור ערך האובייקט Application : TextBox 1.Text=Application[&quot;counter&quot;].ToString(); למחיקת האובייקט נשתמש בהוראה : Application.Remove(&quot; המפתח &quot;); או : Application[“ המפתח ” ] = null;
  • 202. שמירת מצב ( State ) שמירת מידע בצד שרת – Application האובייקט Application הוא משאב משותף לכל המשתמשים . על מנת למנוע התנגשויות בעת הגישה אליו , התנגשויות שנוצרות מגישה של מספר משתמשים בו בעת , יש לנעול אותו לפני כל שינוי הערך , דהיינו , לאפשר גישה רק של משתמש אחד באותו הזמן . לא לשכוח , לשחרר את הנעילה לאחר השינוי . המתודה שנועלת את הגישה אליו ומאפשרת גישה ייחודית : Application.Lock() המתודה שמשחררת את הנעילה : Application.UnLock() צריכים להשתמש במתודות אלה מיד לפני ואחרי שינוי ערך האובייקט .
  • 203. שמירת מצב ( State ) שמירת מידע בצד שרת – Application דוגמה : Application.Lock(); Application[&quot;counter&quot;]=int.Parse(Application[&quot;counter&quot;]. ToString())+1; Appliction.UnLock();
  • 204. שמירת מצב ( State ) שמירת מידע בצד שרת – Application המידע זמין ליותר מלקוח אחד . Application SERVER Client A Client B Client C
  • 205. שמירת מצב ( State ) שמירת מידע בצד שרת – Session ה - Session הוא משאב אישי ללקוח , המידע אינו משותף ואינו נגיש ללקוחות האחרים . כאשר הלקוח מבקר באתר , השרת מקצה לו אובייקט Session ושומר אותו בזיכרון . האובייקט נשמר בזיכרון כל עוד המשתמש נשאר באתר . אם במשך זמן ( מוגדר מראש ) האתר ננטש , האובייקט Session נמחק . הוא נמחק גם כאשר סוגרים את הדפדפן או כאשר נותנים הוראה למחיקתו .
  • 206. שמירת מצב ( State ) שמירת מידע בצד שרת – Session דוגמא לשרת שיוצר שלושה אובייקטים מסוג Session לשלושה לקוחות . Session A Session B Session C SERVER Client A Client B Client C
  • 207. שמירת מצב ( State ) שמירת מידע בצד שרת – Session האובייקט Session נמצא בזיכרון השרת . Request Object Response Object Session Object Client Server
  • 208. שמירת מצב ( State ) שמירת מידע בצד שרת – Session לדוגמה : לקוח הנכנס לאתר הבנק שלו מבקש להזדהות ( שם משתמש וסיסמה ), הנתונים מאומתים מול מסד נתונים ואם ימצאו נכונים הוא יורשה להכנס לאתר ולבצע פעולות . אפליקציה בנקאית תהיה בנויה , מן הסתם , ממספר רב של דפים , במידה ונתוני האימות שלו לא ישמרו הוא יאלץ להקליד אותם בכל דף מחדש , והמערכת תצטרך לאמת אותם בכל בקשה מחדש . אפשר לשמור את המידע בעוגיות , אולם , בעיה , מטעמי אבטחה אסור זה לא הגיוני , העוגיות נשמרות במחשה הלקוח כקבצי טקסט . השימוש ב - Session הוא פיתרון הגיוני יותר .
  • 209. שמירת מצב ( State ) שמירת מידע בצד שרת – Session כדי ליצור אובייקט חדש ולאתחל אותו נשתמש בהוראה : Session.Add(&quot; שם האובייקט “ , ערך האובייקט ); דוגמא : Session.Add(&quot;Name&quot;,&quot;MyName&quot;); או לחלופין : Session[“ &quot; שם האובייקט ]= ערך האובייקט ; דוגמא : Session[&quot;Name&quot;]=&quot;MyName&quot;; אפשר לשמור לתוכו גם משתנה או אובייקט אחר כמו DataSet .
  • 210. שמירת מצב ( State ) שמירת מידע בצד שרת – Session האובייקט Session יכול לקבל את כל סוגי האובייקטיםאשר עונים על דרישה אחת : האובייקט צריך לתמוך ב - .serialization אזהרה : אם אתה מוסיף אובייקט גדול במיוחד למשל DataSet שמכיל 5000 רשומות , כאשר נכנסים לאתר 100 משתמשים יישמרו בזיכרון 1000 אובייקטים מסוג DataSet שמכילים 500.000 רשומות !, בזבוז משאבים ענק .
  • 211. שמירת מצב ( State ) שמירת מידע בצד שרת – Session כדי למחוק אובייקט Session מהזיכרון נשתמש בהוראה הבאה : Session.Remove(&quot; שם האובייקט &quot;); דוגמא : Session.Remove(&quot;Name&quot;); או Session[“Name”] = null; למחיקת כל הערכים של כל אובייקטי ה ' Session של המשתמש מהזיכרון נשתמש בהוראה : Session.RemoveAll();
  • 212. שמירת מצב ( State ) שמירת מידע בצד שרת – Session Session לעומת Application ASP.NET Application 1 Session B Session A Session C Application 2 Session B Session A Session C Application 3 Session B Session A Session C
  • 213. שמירת מצב ( State ) שמירת מידע בצד שרת – Cache האובייקט Cache , כמון האובייקט Application , נועד לשמירת מידע המשותף לכל הגולשים באתר . מכיל יכולות מאוד משופרות לעומת Application . Request Object Response Object Cache Object Client Server
  • 214. שמירת מצב ( State ) שמירת מידע בצד שרת – Cache הכנסת מידע לאובייקט Cache : Cache.Insert[“ מפתח ” ] = ערך האובייקט ); הכנסת מידע לאובייקט Cache תוך השימוש מתודה Insert : Cache.Insert(“ מפתח ” , ערך האובייקט ); דוגמא : Cache.Insert(“Name”,”MyName”); למחיקת האובייקט נשתמש בהוראה : Cache.Remove(“ שם האבייקט &quot;); או Cache[“ שם האובייקט ” ] = null;
  • 215. שמירת מצב ( State ) שמירה בצד הלקוח לעומת שמירה בצד השרת Application Session Cache Request Response Cookies Viewstate QueryString
  • 216. שמירת מצב ( State ) השוואה בין הטכניקות השונות טכניקה באיזה רמה גודל אופטימאלי Cookies הדף קטן Query String הדף קטן Viewstate הדף קטן Application האפליקציה קטן - בינוני Session המשתמש קטן - בינוני Cache האפליקציה גדול
  • 217. שמירת מצב ( State ) מתי להשתמש בכל אחת מהשיטות ? טכניקה מתי להשתמש Cookies לשמירת מידע במחשב הלקוח . Query String URL להעברת מידע מדף אחד לאחר דרך כתובת ה Viewstate כאשר רוצים לשמור מידע על הדף עצמו . Application כאשר רוצים שהמידע יהיה זמין לכל המשתמשים . Session כאשר רוצים שהמידע יהיה ספציפי למשתמש אחד . Cache לשמירת כמות גדולה של מידע לכל המשתמשים .
  • 218. ASP.NET מבוא ל - ASP.NET . יצירת טפסי Web . הפרדה בין קוד לרכיבי תצוגה – Code Behind . טיפול באירועים . קובץ קונפיגורציה – Web.Config . פקדים . פקדים מותאמים אישית . שמירת מצב ( State ) . כתב : אקת ' ם חאג יחיא עריכה מקצועית : ארז קלר www.corner.co.il

Editor's Notes