PracticU

ולידציה - Validation

בלי כתוביותעם כתוביות
PracticU › קורס MVC › ולידציה - Validation
מילון מושגים:
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
טופס - אזור בממשק שבו המשתמש מזין נתונים בשדות ושולח אותם, למשל טופס הרשמה או התחברות.
NuGet - מנהל החבילות של פלטפורמת .NET, המשמש להתקנה ולניהול ספריות בפרויקטים.
jQuery - ספריית JavaScript ותיקה שמפשטת את הגישה לרכיבי הדף, אירועים ואנימציות בדפדפן.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
HTML - שפת הסימון שבה בונים את מבנה ותוכן דפי האינטרנט, באמצעות תגיות שמגדירות כותרות, פסקאות, קישורים ועוד.
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.

ולידציה - Validation
ולידציה היא בדיקה של המידע שהמשתמש מכניס. ההרצאה מראה למה היא צריכה להתבצע גם בדפדפן וגם בשרת, ואיך מגדירים אותה בתצוגה ובמודל.
למה בשני מקומות
1. חיסכון בזמן: בדיקה בדפדפן בעזרת JavaScript מונעת שליחה לשרת של טופס עם שגיאה, למשל אימייל לא תקין.
2. הבדיקה חוזרת בשרת: אם JavaScript כבוי, או אם מישהו שולח בקשה מזויפת, הבדיקה בדפדפן לא מספיקה. לכן הבדיקה בשרת היא זו שחייבת להתבצע.
3. מקרה שרק השרת יכול לבדוק: בדיקה אם שם משתמש כבר קיים במאגר הנתונים, כי הדפדפן לא יודע מה נמצא בשרת.
הגדרה בתצוגה
4. ספריות: מתקינים חבילת NuGet בשם Microsoft jQuery Unobtrusive Validation. Unobtrusive אומר שהבדיקות לא פולשניות, כי הן מוגדרות באטריביוטים מסוג data- שנשתלים ברכיבים, ולא בתוך הקוד.
5. Layout: מוסיפים את הקבצים לאזור ה-head של ה-Layout, כדי שכל הדפים יכירו אותם.
6. הודעות שגיאה: מוסיפים Html.ValidationMessageFor לכל שדה בטופס Create, לשם המוצר ולמחיר.
הגדרה בשרת דרך הקונטרולר
7. בדיקה ב-Action: לפני השמירה בודקים את השדות. אם שם המוצר ריק או מורכב מרווחים בלבד, מוסיפים שגיאה ל-ModelState. אותו דבר למחיר שלילי.
8. בדיקת IsValid: אם ModelState.IsValid הוא false, מחזירים את אותו View כדי שהמשתמש יתקן. רק אחרי זה שומרים במסד הנתונים.
הגדרה במודל (הדרך שהמרצה ממליץ עליה)
9. Attributes: במחלקה Product, בקובץ ה-partial, מוסיפים Required עם הודעה משלנו, ו-StringLength עם מקסימום 40 תווים, כי זו המגבלה במסד הנתונים.
10. Regular Expression: אטריביוט שבודק תבנית טקסט, למשל אורך מינימלי לשם המוצר. המרצה ממליץ לחפש דוגמאות בתיעוד.
11. IValidatableObject: כשבודקים שילוב של שדות, למשל ש-UnitsOnOrder לא יהיה גדול מ-UnitsInStock, המחלקה יורשת את הממשק ומחזירה רשימה של ValidationResult. בכל תוצאה מציינים את שמות השדות, כדי שההודעה תופיע ליד השדה הנכון.
תצוגה והודעות
12. מחיר שלילי: בלי ציון שם השדה ההודעה לא מופיעה, ולכן ב-ValidationResult מציינים את UnitPrice.
13. תצוגה מותאמת: אפשר להציג כוכבית במקום ההודעה המלאה, בעזרת ValidationMessage.
14. סיכום: ValidationSummary מציג את כל השגיאות בבת אחת.
כשהבדיקה נמצאת במודל, כל קונטרולר שעובד איתו מקבל אותה בלי לשכפל קוד.
השיעור הבא בקורס: יצירת Controller בסיס
מילון מושגים:
קוד מקור - הקוד שמפתחים כותבים בשפת תכנות, לפני הידור, המגדיר את פעולת התוכנה.
MVC - דפוס ארכיטקטורה שמפריד יישום לשלושה חלקים: מודל (נתונים), תצוגה (View) ובקר (Controller).

להורדת קוד מקור של כל הדוגמאות בקורס MVC – לחץ כאן


פרקי ההרצאה: ולידציה - Validation

  1. 00:00

    ולידציה בצד הלקוח ובצד השרת

  2. 00:58

    למה לחזור על הבדיקה בשרת

  3. 02:16

    התקנת jQuery Unobtrusive Validation

  4. 02:55

    מה זה Unobtrusive

  5. 04:13

    קבצי הסקריפט ב-Layout

  6. 05:50

    ולידציה ב-View של Create

  7. 06:27

    הודעות שגיאה עם ValidationMessageFor

  8. 07:44

    בדיקה ב-Controller עם AddModelError

תמלול ההרצאה: ולידציה - Validation

הטקסט המלא של הדקות הראשונות בהרצאה «ולידציה - Validation» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

    אנחנו עוברים לביצוע ולידציה על המידע שנקלט מהמשתמש אז בואו נראה איך זה מתבצע אנחנו צריכים לעשות כמה דברים בשביל ולידציה קודם כל, היכן הוולידציה צריכה להיבדק?

  2. 00:15

    האם היא צריכה להיבדק בצד של הלקוח, כלומר על ידי הדפדפן, או בצד של השרת, כאשר המידע כבר מגיע לשרת? אז התשובה ברוב רוב המקרים שהוולידציה צריכה להתבצע בשני המקומות למה היא צריכה להתבצע גם בלקוח ואחר כך לחזור על עצמה גם בשרת?

  3. 00:33

    אז קודם כל הסיבה שהוולידציה צריכה להתבצע בלקוח בצד שלו על ידי הדפדפן זה בכדי לחסוך בזמן של ריצה לשרת. בוא נניח שלקוח מכניס אימייל והאימייל לא בסדר מבחינה תקנית.

  4. 00:49

    אין שום צורך שאנחנו נבצע גלישה לשרת שיכולה גם לקחת טיפה זמן ואז להעמיס על השרת איזושהי בדיקה והשרת אמור נניח לגלות שזה לא נכון ולהחזיר תשובה ללקוח ולהגיד לו תקשיב האימייל שלך לא בסדר.

  5. 01:04

    הבדיקה הזאת יכולה להתבצע בצד של הלקוח על ידי JavaScript ולכן לחסוך בכלל את כל הריצה לשרת. למה הבדיקה צריכה לחזור על עצמה בשרת? מכמה סיבות דבר ראשון יכול להיות שבצד הלקוח לא מאופשר JavaScript ולכן שום בדיקת JavaScript לא תתבצע והלקוח יכול לעקוף את הבדיקה הזאת בצורה כזאת ולשלוח מידע שגוי לשרת.

  6. 01:28

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

  7. 01:47

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

  8. 02:09

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

  9. 02:23

    זה מתבצע על ידי נאגט מיוחד, בואו נלך ל-manage-naget-package-for-solution ונתקין בפרויקט שלנו קבצי JavaScript מיוחדים לביצוע ולידציה.

  10. 02:36

    המצעים האלה ניתנים למציאה על ידי חיפוש jQuery Validation ואנחנו מחפשים ספציפית את זה Microsoft jQuery Unobtrusive Validation.

  11. 02:53

    מה זה בדיוק Unobtrusive? Unobtrusive זה מילה שאומרת לא פולשני, משהו שהוא לא פולשני עבור האתר שלנו. מה הכוונה בדיוק? ברגע שאנחנו משתמשים עם השיטת ולידציה הזאת, אז הרכיבים של האתר שלנו מוגדרים על ידי אטריביוטים מיוחדים שמתחילים בדאטה מינוס.

  12. 03:21

    ישנם מספר אטריביוטים שמתחילים בדאטה מינוס והמערכת פשוט שותלת אותם ברכיבים שלנו, בתיבות הטקסט, בתיבות הקלט השונות ואז jQuery מיוחד שמסוגל לחפש את האטריביוט האלה מצליח למצוא אותם ולפי זה לדעת בדיוק איזה דברים הוא צריך לבדוק מבחינת תקינות קלט.

  13. 03:46

    בגלל שאנחנו לא שמים את האטריביוץ האלה ואנחנו לא בודקים את האטריביוץ האלה, אנחנו כותבים קוד html וJavaScript רגיל, והמנגנון הזה של jQuery Innovative Validation אוטומטית יודע לחפש את הרכיבים האלה בלי לגעת בשאר הדברים שאנחנו כותבים בקוד.

  14. 04:04

    לכן זה נקרא לא פולשני. אז בואו נבצע אינסטול, אנחנו לא רוצים שהוא יתקין את זה בביזנס לוג'יק אנחנו רוצים שהוא יתקין את זה רק בפרויקט ולידיישן נבצע אני אקספט Close ונסתכל שיש לנו פה פתאום תיקיית סקריפט

  15. 04:25

    ויש פה מספר סקריפטים שאנחנו צריכים להשתמש עם חלק מהם. אנחנו הולכים להשתמש עם jQuery ולידיישן מינימום ואנחנו הולכים להשתמש עם jQuery ולידייט אנגסטרסיב מינימום.

  16. 04:38

    זאת אומרת ששני הקבצים האלה דרושים לוולידציה. הדבר הבא זה בואו נשתמש איתם. בשביל שהוולידציה תהיה תקפה לכל האתר ולא רק לדף אחד, בואו נלך ל-Shared, נלך ל-Layout הכללי ונגדיר באזור של ה-Head את הכישורים לקבצים האלה.

  17. 04:59

    אז בואו נלך ל-Script src= ונאתר את שני הקבצים שדיברנו עליהם. קובץ ראשון jQuery validate-mean.js נמצא בתיקיית Scripts.

  18. 05:19

    הקובץ הזה מחזיק את ה-jquery עצמה, את ה-validate שלה ויש לנו כאן Script src שווה ואנחנו מחפשים גם את unobstractive.js. ניקח את הגרסת מינימום שלו, נבצע אוקיי, בואו נשמור את זה. יכול להיות שנצטרך להוסיף בהמשך עוד קובץ, תכף נראה. אז עכשיו כל האתר שלנו יוכל להכיר את שני הקבצים האלה כי הם נמצאים ב-head של ה-Layout וכל הדפים אמורים להיות חלק מה-Layout.

  19. 06:00

    זה דבר אחד שעשינו, דבר שני אנחנו צריכים לגשת עכשיו ל-views שאנחנו רוצים לבצע ולידיישן עבורו. בואו נגיד שאנחנו רוצים לבצע ולידיישן עבור הוספה של מוצר חדש.

  20. 06:13

    אז נלך ל-view של קריאייט ונראה שיש לנו פה ב-view של הקריאייט בגין פורום, יש לנו כאן קבלה של product name ויש לנו קבלה של unit price ולחצה נוספה.

  21. 06:27

    אז בואו נגדיר ולידציה עבור שני החבר'ה האלה. אז איך אנחנו עושים את זה? דבר ראשון מה שאנחנו צריכים לעשות ב-view עצמו זה להגדיר הודעות שגיאה עבור הוולידציה.

  22. 06:42

    זה מתבצע על ידי html helper שנקרא validate message 4. כאן אנחנו נותנים לו את החלק במודל שאנחנו רוצים לבצע ביינדינג עבורו, זה יהיה product name וניקח עוד אחד עבור unit price.

  23. 07:10

    מה זה בדיוק הרכיבים האלה? אלה הודעות שגיאה שיקפצו אך ורק במידה והייתה שגיאה בוולידציה או בצד של הלקוח או בצד של השרת אז פשוט שמנו אותם כאן validation message 4 ואנחנו יכולים לעבור לחלק הבא החלק הבא מגדיר מהי הבדיקה שאנחנו רוצים לבצע עבור כל אחד מתיבות הקלט זה מוגדר בצד של השרת

  24. 07:41

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

  25. 08:01

    זה מתבצע על ידי סדרת איפים. אם string.is null or whitespace עבור p.product name, כלומר אם המשתמש הכניס מחרוזת ריקה או whitespace זה יכול להיות לדוגמת tab או enter או משהו שלא רואים אותו, מבחינתנו זה לא חוקי ולכן מה שאנחנו עושים אנחנו פונים למודל state איזשהו property ששייך

  26. 08:33

    לקונטרולר ואנחנו אומרים לו add model arrow כלומר אנחנו גילינו שיש פה איזושהי בעיה ואנחנו רוצים שהוא יוסיף איזושהי שגיאה לכל המודל כרגע אז בואו נסתכל ונראה מה אנחנו צריכים לתת לו אנחנו צריכים לתת לו איזשהו מפתח וזה יהיה השם של המאפיין product name product name הוא זה שיצר כרגע את הבעיה

  27. 08:58

    לאחר מכן אנחנו צריכים לתת לו איזושהי הודעת שגיאה. נרשום את ההודעה הבאה product name is required. בסדר הוא לא הכניס לנו product name חוקי, אנחנו אומרים לו תקשיב בוא תכניס משהו שהוא חוקי.

  28. 09:18

    נשכפל את אותה בדיקה פחות או יותר עבור unit price. על unit price אנחנו נבדוק שהוא בעצם חיובי

לקורס המלא: קורס MVC אונליין בעברית

ההרצאה הקודמת: שימוש בתבניות מוכנות - Scaffold

ההרצאה הבאה: יצירת Controller בסיס

הרצאות קשורות מקורסים אחרים

  • Validation - ולידציה
  • ולידציה על קלט המשתמש - Validation
  • ולידציה בריאקט - React Validation
  • ביצוע ולידציה על POST Requests

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס Git ו-GitHub עם Visual Studio