Layout בקצרה:
בתיקיית Views אם יש קובץ בשם _ViewStart, אז הוא נקרא תמיד לפני כל תצוגה.
בקובץ הזה יש קוד, שככה הוא נראה בדרך כלל:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
כיון ששורת קוד מבוצעת עבור כל התצוגות, הרי זה כאילו כתוב את זה בכל תצוגה. זה בעצם מגדיר את נתיב הקובץ _Layout.cshtml למאפיין Layout שההשלכה שלו היא שהדף מבוסס על התבנית של הדף שצויין.
תצוגה שיש לה Layout לא מרונדרת באופן ישיר: קודם מרונדר קובץ האב, ורק אם-איפה שיש @RenderBody() מוזרק הרינדור של התצוגה עצמה.
(בתצוגות שנרצה לדרוס התנהגות זו מוסיפים בהתחלה Layout = null וזה מאפס את ההגדרה).
הבעיה שלי העיקרית שאני לא מצליח להבין עדיין איך אני כותב קוד C# ומה התחביר שמתחבר לכיון התצוגה (מקווה שהסברתי נכון).
תתחיל ממשהו קטן, נניח תכתוב במתודה אינדקס כזה קוד:
public ActionResult Index()
{
ViewData["result"] = 1 + 1;
return View();
}
ובRazor תכתוב איפשהוא
<strong>result is</strong> @ViewData["result"]
ותראה את התוצאה.
להבנת העברת המידע לבקר תכתוב משהו גדול יותר, למשל:
public ActionResult Calc(int oneNumber, int anotherNumber)
{
ViewData["result"] = oneNumber * anotherNumber;
return View("Index");
}
בשביל לצפות בתוצאה כתוב בשורת הכתבות נתיב כזה:
http://localhost:xx/Home/Calc?oneNumber=52&anotherNumber=33
שים לב שהעברתי למתודה View פרמטר טקסט Index כי רציתי להשתמש בתצוגה של מתודה עם שם שונה, אז לא יכלתי לסמוך על הCoc - מוסכמות.
הפרמטרים oneNumber anotherNumber של המתודה אינדקס מסופקים אוטומטית ע"י המנוע של MVC, כשהוא מאתר אותם בפרמטרי הכתובת - QueryString. למנגנון התאמת פרמטרי המתודה לערכים המסופקים ע"י הבקשה קוראים Model Binder והוא רחב אפשרויות, הוא קורא ערכים הן מהכתובת הן מפרמטרי הכתובת, והן מגוף הבקשה (body).
@dovid האם הספר הזה: מדריך ASP.NET MVC 4 מתאים לי להתחלה?
יש לי אותו ונהנתי ממנו בבחינת "המקסימום שהיה בעברית".