
ModelState.IsValid הוא false, מחזירים את אותו View כדי שהמשתמש יתקן. רק אחרי זה שומרים במסד הנתונים.הטקסט המלא של הדקות הראשונות בהרצאה «ולידציה - Validation» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו עוברים לביצוע ולידציה על המידע שנקלט מהמשתמש אז בואו נראה איך זה מתבצע אנחנו צריכים לעשות כמה דברים בשביל ולידציה קודם כל, היכן הוולידציה צריכה להיבדק?
האם היא צריכה להיבדק בצד של הלקוח, כלומר על ידי הדפדפן, או בצד של השרת, כאשר המידע כבר מגיע לשרת? אז התשובה ברוב רוב המקרים שהוולידציה צריכה להתבצע בשני המקומות למה היא צריכה להתבצע גם בלקוח ואחר כך לחזור על עצמה גם בשרת?
אז קודם כל הסיבה שהוולידציה צריכה להתבצע בלקוח בצד שלו על ידי הדפדפן זה בכדי לחסוך בזמן של ריצה לשרת. בוא נניח שלקוח מכניס אימייל והאימייל לא בסדר מבחינה תקנית.
אין שום צורך שאנחנו נבצע גלישה לשרת שיכולה גם לקחת טיפה זמן ואז להעמיס על השרת איזושהי בדיקה והשרת אמור נניח לגלות שזה לא נכון ולהחזיר תשובה ללקוח ולהגיד לו תקשיב האימייל שלך לא בסדר.
הבדיקה הזאת יכולה להתבצע בצד של הלקוח על ידי JavaScript ולכן לחסוך בכלל את כל הריצה לשרת. למה הבדיקה צריכה לחזור על עצמה בשרת? מכמה סיבות דבר ראשון יכול להיות שבצד הלקוח לא מאופשר JavaScript ולכן שום בדיקת JavaScript לא תתבצע והלקוח יכול לעקוף את הבדיקה הזאת בצורה כזאת ולשלוח מידע שגוי לשרת.
מקרה שני זה מישהו יכול פשוט לזייף ריקווסט ולשלוח מה שהוא רוצה לשרת בלי בכלל לעבור דרך הוולידציה שלנו. האקר לדוגמה ולכן תמיד הוולידציה צריכה לחזור על עצמה בצד של השרת המקרה היחידי שבו ולידציה לא יכולה להתבצע בצד של הלקוח וצריכה להתבצע בצד של השרת זה אם אין מספיק
נתונים בצד של הלקוח לדוגמה האם שם משתמש שהלקוח בוחר בשביל להירשם לאתר קיים או לא קיים לנו במאגר הנתונים כאן בעצם אנחנו לא יכולים לבצע את הבדיקה בצד של הלקוח לפני שהמידע איזה לקוחות כבר נרשמו קיים בשרת אז זה מקרה יחידי בו אנחנו לא יכולים לבצע בצד של הלקוח בדיקה.
אז בואו נראה מה אנחנו צריכים לעשות בשביל לבצע את הוולידציה גם בצד הלקוח וגם בצד השרת. דבר ראשון, אנחנו צריכים להוסיף לפרויקט שלנו סקריפטים שיהיו מסוגלים לבצע את הוולידציה.
זה מתבצע על ידי נאגט מיוחד, בואו נלך ל-manage-naget-package-for-solution ונתקין בפרויקט שלנו קבצי JavaScript מיוחדים לביצוע ולידציה.
המצעים האלה ניתנים למציאה על ידי חיפוש jQuery Validation ואנחנו מחפשים ספציפית את זה Microsoft jQuery Unobtrusive Validation.
מה זה בדיוק Unobtrusive? Unobtrusive זה מילה שאומרת לא פולשני, משהו שהוא לא פולשני עבור האתר שלנו. מה הכוונה בדיוק? ברגע שאנחנו משתמשים עם השיטת ולידציה הזאת, אז הרכיבים של האתר שלנו מוגדרים על ידי אטריביוטים מיוחדים שמתחילים בדאטה מינוס.
ישנם מספר אטריביוטים שמתחילים בדאטה מינוס והמערכת פשוט שותלת אותם ברכיבים שלנו, בתיבות הטקסט, בתיבות הקלט השונות ואז jQuery מיוחד שמסוגל לחפש את האטריביוט האלה מצליח למצוא אותם ולפי זה לדעת בדיוק איזה דברים הוא צריך לבדוק מבחינת תקינות קלט.
בגלל שאנחנו לא שמים את האטריביוץ האלה ואנחנו לא בודקים את האטריביוץ האלה, אנחנו כותבים קוד html וJavaScript רגיל, והמנגנון הזה של jQuery Innovative Validation אוטומטית יודע לחפש את הרכיבים האלה בלי לגעת בשאר הדברים שאנחנו כותבים בקוד.
לכן זה נקרא לא פולשני. אז בואו נבצע אינסטול, אנחנו לא רוצים שהוא יתקין את זה בביזנס לוג'יק אנחנו רוצים שהוא יתקין את זה רק בפרויקט ולידיישן נבצע אני אקספט Close ונסתכל שיש לנו פה פתאום תיקיית סקריפט
ויש פה מספר סקריפטים שאנחנו צריכים להשתמש עם חלק מהם. אנחנו הולכים להשתמש עם jQuery ולידיישן מינימום ואנחנו הולכים להשתמש עם jQuery ולידייט אנגסטרסיב מינימום.
זאת אומרת ששני הקבצים האלה דרושים לוולידציה. הדבר הבא זה בואו נשתמש איתם. בשביל שהוולידציה תהיה תקפה לכל האתר ולא רק לדף אחד, בואו נלך ל-Shared, נלך ל-Layout הכללי ונגדיר באזור של ה-Head את הכישורים לקבצים האלה.
אז בואו נלך ל-Script src= ונאתר את שני הקבצים שדיברנו עליהם. קובץ ראשון jQuery validate-mean.js נמצא בתיקיית Scripts.
הקובץ הזה מחזיק את ה-jquery עצמה, את ה-validate שלה ויש לנו כאן Script src שווה ואנחנו מחפשים גם את unobstractive.js. ניקח את הגרסת מינימום שלו, נבצע אוקיי, בואו נשמור את זה. יכול להיות שנצטרך להוסיף בהמשך עוד קובץ, תכף נראה. אז עכשיו כל האתר שלנו יוכל להכיר את שני הקבצים האלה כי הם נמצאים ב-head של ה-Layout וכל הדפים אמורים להיות חלק מה-Layout.
זה דבר אחד שעשינו, דבר שני אנחנו צריכים לגשת עכשיו ל-views שאנחנו רוצים לבצע ולידיישן עבורו. בואו נגיד שאנחנו רוצים לבצע ולידיישן עבור הוספה של מוצר חדש.
אז נלך ל-view של קריאייט ונראה שיש לנו פה ב-view של הקריאייט בגין פורום, יש לנו כאן קבלה של product name ויש לנו קבלה של unit price ולחצה נוספה.
אז בואו נגדיר ולידציה עבור שני החבר'ה האלה. אז איך אנחנו עושים את זה? דבר ראשון מה שאנחנו צריכים לעשות ב-view עצמו זה להגדיר הודעות שגיאה עבור הוולידציה.
זה מתבצע על ידי html helper שנקרא validate message 4. כאן אנחנו נותנים לו את החלק במודל שאנחנו רוצים לבצע ביינדינג עבורו, זה יהיה product name וניקח עוד אחד עבור unit price.
מה זה בדיוק הרכיבים האלה? אלה הודעות שגיאה שיקפצו אך ורק במידה והייתה שגיאה בוולידציה או בצד של הלקוח או בצד של השרת אז פשוט שמנו אותם כאן validation message 4 ואנחנו יכולים לעבור לחלק הבא החלק הבא מגדיר מהי הבדיקה שאנחנו רוצים לבצע עבור כל אחד מתיבות הקלט זה מוגדר בצד של השרת
ויש שתי שיטות להגדיר את זה שיטה ראשונה דרך הקונטרולר בואו נעשה אותה נלך לקונטרולר, נלך לפונקציה של ההוספה, הנה היא כאן, ובפונקציה של ההוספה אנחנו רוצים לבצע בדיקה האם המידע חוקי או לא חוקי.
זה מתבצע על ידי סדרת איפים. אם string.is null or whitespace עבור p.product name, כלומר אם המשתמש הכניס מחרוזת ריקה או whitespace זה יכול להיות לדוגמת tab או enter או משהו שלא רואים אותו, מבחינתנו זה לא חוקי ולכן מה שאנחנו עושים אנחנו פונים למודל state איזשהו property ששייך
לקונטרולר ואנחנו אומרים לו add model arrow כלומר אנחנו גילינו שיש פה איזושהי בעיה ואנחנו רוצים שהוא יוסיף איזושהי שגיאה לכל המודל כרגע אז בואו נסתכל ונראה מה אנחנו צריכים לתת לו אנחנו צריכים לתת לו איזשהו מפתח וזה יהיה השם של המאפיין product name product name הוא זה שיצר כרגע את הבעיה
לאחר מכן אנחנו צריכים לתת לו איזושהי הודעת שגיאה. נרשום את ההודעה הבאה product name is required. בסדר הוא לא הכניס לנו product name חוקי, אנחנו אומרים לו תקשיב בוא תכניס משהו שהוא חוקי.
נשכפל את אותה בדיקה פחות או יותר עבור unit price. על unit price אנחנו נבדוק שהוא בעצם חיובי