
View(model), ובתחילת ה-View מגדירים את טיפוס המודל בעזרת @model. למשל, מוצר עם מזהה, שם ומחיר נשלח, וה-View מציג את השם בעזרת Model.ProductName.RedirectToAction לדף תודה. בדף התודה מציגים הודעה כמו Thanks, Moishe, your operation was successful.הטקסט המלא של הדקות הראשונות בהרצאה «העברת מידע מ-Controller ל-View» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו הולכים לראות זה מספר שיטות להעברת מידע בין הקונטרולר לבין ה-View. עכשיו, למה חשוב לנו לדעת את זה? מפני שכאשר אנחנו בצד השרת, אנחנו תמיד משחקים בין הקונטרולר ל-View.
מה זאת אומרת? הלקוח גולש לקונטרולר בשביל לבצע איזושהי פעולה, ואז אנחנו רוצים להעביר מידע בין הקונטרולר ל-View, שה-View יציג את המידע הזה.
אנחנו ראינו שכאשר הוא גולש, אנחנו לוקחים את המודל, כלומר את הנתונים שאנחנו עובדים איתם, מעבירים ל-view, ואז ה-view מציג אותם. אבל זאת לא השיטה היחידה שקיימת.
לפעמים אנחנו נרצה לעשות את הדבר הזה, ולפעמים אנחנו נרצה להעביר מידע נוסף מעבר למידע הראשי. אז בואו נראה איך אנחנו יכולים להעביר מידע מהקונטרולר ל-view במספר שיטות.
דבר ראשון, יש לנו כאן במודל מודל אחד שנקרא product, יש לו product ID, יש לו product name ויש לו price. בואו נצרף קונטרולר, נלך ל-add, פרודקט קונטרולר ונבנה לנו product controller product controller נבנה פה איזושהי פונקציה get some product הפונקציה הזאת ניגשת
לדאטאבייס מוציאה מהדאטאבייס איזשהו מוצר שהלקוח רוצה אנחנו כרגע נבנה אותו product p שווה new product נאכלס אותו בנתונים product name ביסלי, פרייס, 3.4, דצימל, פרודקט איי-די, 100. נניח שזה המוצר שהבאנו מהדאטה-בייס.
השיטה הראשונה שכבר ראינו אותה, ואם המידע הזה זה המידע הראשי שאנחנו מתעסקים איתו, כלומר המודל הראשי שהלקוח רוצה לראות, אז אנחנו שולחים אותו ל-view בסוגריים.
בואו ניצור view כרגע, add view, get some product, אנחנו יכולים להגדיר create a strongly type view, אנחנו כאן יכולים להגדיר את הטיפוס נתונים שהמודל מתעסק איתו.
טיפוס הנתונים שהמודל מתעסק איתו זה הטיפוס של הפרודקט. אז בואו נלך לפרודקט, נעתיק את מרחב השמות הזה, נחזור בחזרה, נדביק עם הנקודה product, מפני שזה הטיפוס המלא שאנחנו מתעסקים איתו.
נבצע add וכבר נראה שכאן נכתב לנו אוטומטית המודל. כמובן שבמציאות היה רצוי שכל מרחב השמות הוא זהה כמו שלמדנו ולכן לא היינו צריכים לכתוב את כל הדבר הזה אבל כרגע מרחב השמות הוא שונה בין כל אחד מהחלקים של MVC אז יש לנו צורך להגדיר את המרחב שמות המלא אוקיי, אז השיטה הזאת העברנו את המודל הראשי ואנחנו רוצים להציג אותו
בואו ניקח כאן איזושהי כותרת, נקרא לה data transferred ונציג את כל המידע שהתקבל אז בגלל שאנחנו העברנו את המידע למודל עצמו, יותר נכון ל-view, והמידע שלנו זה המודל, אז אנחנו פשוט ניגשים אליו על ידי מודל.
ברגע שאנחנו עושים נקודה, אנחנו מקבלים את ה-product name, אנחנו יכולים להציג פה html רגיל, נרד בשורה, נציג את ה-price, נרד בשורה, ונציג את ה-id.
אוקיי, אז יש לנו את הפונקציה get some product, בואו נגלוש לאתר שלנו, קונטרולר פרודקטס פונקציה get some product ואנחנו רואים שהצלחנו להעביר את המידע בשיטה הסטנדרטית בין הקונטרולר לבין ה-view ואז ה-view הציג אותו אבל זה המידע הראשי שקיים ואותו אנחנו רוצים להציג זה המידע המרכזי שאנחנו רוצים להציג מה קורה אם אנחנו רוצים בנוסף
להעביר מידע נלווה למידע הזה בוא נניח שם המשתמש הנוכחי אבל אנחנו כבר לא יכולים לשלוח אותו באותה שיטה ששלחנו אותו ל-view ה-view מקבל דבר אחד ויחיד שזה המודל שאיתו אנחנו מתעסקים, המידע הראשי שאיתו אנחנו מתעסקים.
בשביל להעביר מידע נוסף, יש לנו מספר שיטות. השיטה הראשונה נקראת viewData. viewData למעשה זה Dictionary, כלומר קולקשן שמקבל ערכים שהם Key ו-Value. כל ערך שאנחנו מוסיפים לקולקשן, אנחנו צריכים לספק לו איזשהו מפתח שהוא חייב להיות ייחודי, ואת המידע עצמו שהוא צמוד למפתח.
אז בואו נקרא לפונקציה add ונוסיף Username, בואו נניח שאנחנו הוצאנו מהדאטאבייס את השם שלו והשם שלו נקרא מוישה. אנחנו כרגע מעבירים לקונטרולר גם את השם משתמש בנוסף למידע הראשי שאנחנו מתעסקים איתו.
אוקיי, איך אנחנו מוצאים אותו מה-view? אז בואו נלך ל-view ופה למעלה נגדיר span של user name וכל מה שאנחנו צריכים לעשות זה לגשת על ידי שטרודל ל-view data ובסוגריים מרובעות אנחנו ניגשים ומוצאים את המידע על ידי המפתח הייחודי שנתנו לו user name בואו נראה את כאן שורה או שתיים נריץ נגלוש לאותה פונקציה ונראה כרגע שהקונטרולר
הצליח להעביר ל-view גם את שם המשתמש וגם את המידע הראשי שהוא מעוניין להציג שם המשתמש זה מידע נלווה זה לא הראשי אבל הצלחנו להעביר אותו שיטה נוספת יכולה להיות בעזרת view data בלי פונקציית add פשוט פונים ל-view data ניגשים
בעזרת סוגריים למפתח שאנחנו רוצים אפילו שהוא לא קיים ומכניסים את שם המשתמש זה כמובן שיטה אחרת מהשיטה הראשונה זאת אומרת שאת זאת אנחנו כרגע נמחק נשים אותה בהערה ואנחנו רואים שגם כך אנחנו יכולים להשתמש בעזרת הדיקשנרי שנקרא view data בואו נבדוק את זה נריץ את האתר ניגש לפונקציה
get some product ונראה שהמידע הגיע בצורה תקינה כמו מקודם אבל עכשיו עכשיו ראינו שתי שיטות להעברת מידע מהקונטרולר ל-View.
ViewData זה דיקשנרי שנחשב כבר מיושן, לפעמים רואים שמתעסקים איתו, אבל בשלב כלשהו באחת הגרסאות של MVC הוסיפו רכיב שקצת יותר נוח לעבוד איתו. הרכיב נקרא ViewBag.
ViewBag למעשה זה משתנה מטיפוס Dynamic. דיינמיק זה אומר שאנחנו יכולים להגדיר כל דבר שאנחנו רוצים מבחינת פרופרטיז בתוך המשתנה הזה והקומפיילר לא יבדוק את הנכונות של מה שכתבנו.
זאת אומרת שאנחנו יכולים להמציא כרגע שם של משתנה לדוגמה username כאילו שהוא באמת קיים להכניס לתוכו את הערך והקומפיילר לא יבדוק אם אכן קיים דבר כזה או לא קיים.
רק בזמן הריצה הקומפיילר יבדוק האם מישהו באמת הכניס לי מידע לתוך היוזרניים או שהוא לא הכניס לי אם אין לנו שום דבר כזה כמובן תתבצע חריגה שגיאת ריצה כאשר אנחנו נמצאים ב-view ואנחנו רוצים להוציא את המידע הזה כל מה שאנחנו צריכים לעשות בואו ניגש ל-view ואפילו כאן נרד שורה ונרשום שטרודל viewbag.username כאילו שבאמת
דבר כזה קיים כאילו שמשתנה כזה קיים הקונטרולר הכניס מידע בו ויצר אותו ואנחנו יכולים לקבל אותו ב-view אוקיי, זה אנחנו יכולים כרגע לשים בהערה.
בואו נבדוק, ניגש לאותה פונקציה ושוב פעם קיבלנו את המידע הנלווה על ידי ViewBag במקום ViewData. ViewBag למעשה מחליף את ViewData.
אז עד עכשיו ראינו שלוש שיטות. השיטה המרכזית, העברת המידע הראשי ל-View. שיטה שנייה, העברת מידע נלווה על ידי ViewData באחת משתי צורות.
שיטה שלישית העברת המידע על ידי view-bag גם הוא מידע נלווה וזאתי שיטה קצת יותר חדשנית אבל מה קורה אם אנחנו רוצים להעביר מידע בין מספר גלישות בין הלקוח לשרת מה זאת אומרת נניח שיש לנו איזושהי פונקציה שהלקוח רוצה לקרוא לה והיא מבצעת איזושהי שמירה בדאטאבייס של איזשהו מידע בואו ניקח פונקציה
נחזירה action result