מדריך ASP.NET MVC – הגדרת Action המטפל בקלט מהדפדפן
בפרקים הקודמים למדנו כיצד להגדיר תצוגת יצירה. בפרק זה אנו נלמד כיצד ASP.NET MVC מאפשר לנו להתמודד עם הקלט שנשלח מתצוגה זו.
להורדת הקוד של הפרק הקודם לחץ כאן
תחילה נוסיף Action חדש שמטפל בהוספה של תת קבוצה לתוך הקבוצה הנוכחית. לשם כך יש לבצע את הפעולות הבאות:
פתח את הקובץ GroupController.cs
הוסף פונקציה חדשה בשם Create שמקבלת כפרמטר אובייקט מסוג Group ומחזירה (בינתיים) View ללא פרמטרים. הקוד נראה כך:
public ActionResult Create()
{
return View();
}
public ActionResult Create(Group group)
{
return View();
}
שים לב כי קיימות שתי פונקציות בעלות שם זהה אך תפקיד שונה. הפונקציה הראשונה אחראית להחזיר תצוגת יצירה בעוד שהשנייה אחראית לטפל בקלט שנשלח מה-Browser. השימוש בשם זהה גורם לשגיאת זמן הריצה הבאה כאשר מנסים להפעיל את אחד משני ה-Actions
על מנת להתגבר על השגיאה עלינו להשתמש ב-Attributes המתאימים. שנה את הקוד באופן הבא:
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Group group)
{
return View();
}
שים לב כי בדוגמא מעלה שתי הפונקציות מעוטרות ב-HttpGet ו-HttpPost בהתאמה. Attributes אלו מדריכים את התשתיות של ASP.NET MVC לדעת איזה אחת משתי הפונקציות יש להפעיל עבור בקשה נתונה.
שנה את הפונקציה שמטפלת ב-POST לקוד הבא:
[HttpPost]
public ActionResult Create(Group group)
{
AddressBookDB db = AddressBookDB.Create();
db.Root.Items.Add(group);
return RedirectToAction("Index");
}
נשים לב לנקודות הבאות:
- ASP.NET MVC יודע לנתח את ה-Form שנשלח מה-Browser וליצור ממנו אובייקט חדש מהסוג המתאים לפרמטר שה-Action מצפה לו. במקרה שלנו, ASP.NET MVC ייצר אובייקט חדש מסוג Group ויאתחל את ה-Property Name שלו בערך שנמסר מה-Browser.
- ההתאמה בין השדות שנשלחים מה-Browser ל-Properties בתוך האובייקט נעשית בהסתמך על השוואת שמות. לדוגמא, אם ה-Browser שולח שדה בשם "name" אזי MVC ייעדכן את ה-Property הקרוי Name בתוך האובייקט Group. תהליך זה נקראה Model Binding וניתן לשנות את ההתנהגות שלו ולהרחיבו ע" מימוש של מחלקות יעודיות (רוב הזמן אין צורך בכך).
- במקום להגדיר Action שמקבל אובייקט מסוג Group ניתן להגדיר פרמטרים מפורשים המקבילים בשמות שלהם לשדות שנשלחים מה-Browser. לדוגמא, ניתן להגדיר את ה-Action באופן הבא:
[HttpPost]
public ActionResult Create(string name)
{
Group group = new Group() { Name = name };
AddressBookDB db = AddressBookDB.Create();
db.Root.Items.Add(group);
return RedirectToAction("Index");
}
כרגע, הקוד איננו בודק את תקינות הקלט. המשמעות בדוגמא שלנו היא שהמשתמש יכול ליצור קבוצה חדשה ללא שם. אנו נרצה לתקן נקודה זאת בהמשך כאשר נעסוק בנושא "תקינות הקלט".
לאחר התיקון בקוד ניתן להריץ את התוכנית. הפעם כבר אפשר להכניס נתונים חדשים והם יוצגו ברשימה הכללית. שים לב שניתן ללחוץ על כפתור ה-Create גם כאשר שדה ה-Name הינו ריק. במקרה זה תיווצר קבוצה חדשה ללא שם. התנהגות זו איננו רצויה. בפרק הבא אנו נלמד כיצד לבדוק האם הקלט שנשלח לשרת הינו תקין ולייצר הודעות מתאימות במידה ואיננו תקין.
תגובות בפייסבוק