• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Asp.net
 

Asp.net

on

  • 7,381 views

how to use the asp.net tool box for your w.s project

how to use the asp.net tool box for your w.s project

Statistics

Views

Total Views
7,381
Views on SlideShare
7,377
Embed Views
4

Actions

Likes
0
Downloads
115
Comments
0

1 Embed 4

http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • מצגת 2

Asp.net Asp.net Presentation Transcript

  • 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
    • הצגת הדגמה מדיסק ..CopyCdMicAspAndAdoDefault.htm
    D:ehavaWeb ApplicationsTeacherCourseCopyCdMicAspAndAdoDefault.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:netpubwwrootestyDB.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 SettingsAdministrator
  • שמירת מצב ( 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