SlideShare a Scribd company logo
ASP.Net MVC
natankrasney@gmail.com
1
? MVC ‫זה‬ ‫מה‬
‫ידוע‬ Software Architectural Pattern ‫הוא‬ MVC
‫באנטרנט‬ ‫תכנות‬ ‫עבור‬ ‫נרחב‬ ‫בשימוש‬ ‫נמצא‬ ‫אבל‬ Desktop ‫לאפליקציות‬ 70‫ה‬ ‫בשנות‬ ‫הומצא‬
ASP.Net MVC , Laravel ‫לדוגמא‬
: ‫להלן‬ ‫מופיעים‬ pattern ‫ה‬ ‫של‬ ‫המרכיבים‬
natankrasney@gmail.com
2
Model
UI ‫ה‬ ‫מן‬ ‫במנותק‬ ‫האפליקציה‬ ‫של‬ Business Logic ‫ה‬ ‫את‬ ‫מיצג‬ Model
‫האפליקציה‬ ‫של‬ Model ‫ל‬ ‫ולקוח‬ ‫סרט‬ ‫ישתיכו‬ ‫וידאו‬ ‫ספרית‬ ‫של‬ ‫באתר‬
‫אחד‬ ‫כל‬ class - ‫מחלקה‬ ‫ידי‬ ‫על‬ ‫מיצגים‬ ‫יהיו‬ ‫ולקוח‬ ‫סרט‬
properties - ‫בלבד‬ ‫מידע‬ ‫יכללו‬ ‫האלה‬ ‫המחלקות‬
POCO - Plain Old CLR Object ‫נקרא‬ ‫כזו‬ ‫מחלקה‬ ‫של‬ ‫אוביקט‬
C# ‫בשפת‬ class ‫בעזרת‬ Model ‫מממשים‬ ASP.Net MVC ‫ב‬
: ASP.Net MVC ‫בפרויקט‬ ‫מבנה‬
●Models ‫בספריה‬ ‫לשים‬ ‫נהוג‬ model ‫שהן‬ ‫מחלקות‬
natankrasney@gmail.com
3
Controller
Request ‫ה‬ ‫את‬ ‫ז"א‬ HTTP ‫בקשת‬ ‫את‬ ‫לקבל‬ ‫אחראי‬
storage‫ב‬ ‫לשמור‬ ‫לדוגמא‬ - Request‫ב‬ ‫מטפל‬
Response ‫ה‬ ‫את‬ ‫ז"א‬ HTTP ‫תשובת‬ ‫מחזיר‬
C# ‫בשפת‬ class ‫בעזרת‬ Controller ‫מממשים‬ ASP.Net MVC ‫ב‬
: ASP.Net MVC ‫בפרויקט‬ ‫מבנה‬
●Controllers ‫בספריה‬ ‫שמים‬ ‫ים‬ - controller‫ה‬ ‫כל‬ ‫את‬
●DefaultController ‫לדוגמא‬ controller ‫עם‬ ‫להסתיים‬ ‫חייב‬ controller ‫של‬ ‫שם‬
natankrasney@gmail.com
4
View
‫בלבד‬ ‫לתצוגה‬ ‫מיועד‬ view ‫ה‬
‫הלקוח‬ ‫של‬ ‫לדפדן‬ ‫מגיע‬ ‫אשר‬ HTML ‫ה‬ ‫זהו‬
cshtml ‫ובקבצי‬ Razor ‫תחביר‬ ‫בעזרת‬ View ‫מממשים‬ ASP.Net MVC ‫ב‬
‫פעולות‬ .view ‫ב‬ storage‫מ‬ ‫כתיבה‬ / ‫קריאה‬ ‫כמו‬ ‫פעולות‬ ‫לשים‬ ‫מקובל‬ ‫לא‬ ASP.Net MVC ‫ב‬
controller‫ב‬ ‫יתבצעו‬ ‫כאלה‬
: ASP.Net MVC ‫בפרויקט‬ ‫מבנה‬
●‫שלה‬ controller‫ה‬ ‫שם‬ ‫כמו‬ ‫ששמה‬ ‫ספריה‬ ‫בתת‬ Views ‫בספריה‬ ‫שמים‬ ‫ים‬ - view‫ה‬ ‫את‬
(‫בהמשך‬ ‫דוגמה‬ ‫)נראה‬
natankrasney@gmail.com
5
Controller - ‫סכמטי‬ ‫תיאור‬
: ‫להלן‬ ‫יראה‬ ‫זה‬ ‫אז‬ ‫למשתמש‬ ‫הסרטים‬ ‫את‬ ‫להציג‬ ‫רוצים‬ ‫אם‬ ‫לדוגמא‬
natankrasney@gmail.com
6
HTTP Request to
movies server
HTTP Response
to client
Storage
MVC ‫יתרונות‬
‫במערכת‬ ‫המרכיבים‬ ‫בין‬ ‫ברורה‬ ‫הפרדה‬ ‫ז"א‬ Separation Of Concerns ‫מאפשר‬
‫הקוד‬ ‫של‬ ‫יותר‬ ‫טובה‬ ‫תחזוקה‬ ‫מאפשר‬
‫במקביל‬ ‫לעבוד‬ ‫יכולים‬ ‫צוותים‬ ‫כמה‬ - ‫מהיר‬ ‫פיתוח‬ ‫מאפשר‬
natankrasney@gmail.com
7
‫עבודה‬ ‫סביבת‬
‫יותר‬ ‫מתקדמת‬ ‫גירסה‬ ‫או‬ Visual Studio 2015
: ‫הבאה‬ ‫בצורה‬ ‫נעשה‬ ‫מינימלי‬ ASP.Net MVC ‫יצירת‬
File->New->Project->Web->ASP.Net Web Application(.Net Framework) and ok
Choose Empty and mark “Add folders and core reference for” MVC
natankrasney@gmail.com
8
view ‫ו‬ controller ‫יצירת‬
‫ואז‬ Controller ‫כך‬ ‫ואחר‬ Add ‫ימני‬ ‫מקש‬ Controllers ‫ספרית‬ ‫סימון‬ ‫בעזרת‬ controller ‫ניצור‬
DefaultController ‫בשם‬ ‫ונבחר‬ Mvc 5 Controller - empty ‫נבחר‬
View ‫מחזיר‬ ‫אשר‬ Index ‫בשם‬ Action - ‫פונקציה‬ ‫נוצרה‬ DefaultController ‫המחלקה‬ ‫בתוך‬
‫בספריה‬ ‫ניצור‬ ‫אותו‬ Index.cshtml ‫ז"א‬ action‫ה‬ ‫כמו‬ ‫שם‬ ‫באותו‬ View ‫היא‬ ‫המחדל‬ ‫ברירת‬
Views ‫ל‬ ‫מתחת‬ Default
natankrasney@gmail.com
9
‫תואמים‬ view ‫ו‬ controller ‫קבצי‬
namespace MVC_empty.Controllers
{
public class DefaultController : Controller{
// GET: Default
public ActionResult Index(){
return View();
}
}}
natankrasney@gmail.com
10
@{Layout = null;}
<!DOCTYPE html>
<html><head>
<meta name="viewport" content="width=device-width"
/>
<title>Index</title>
</head><body>
<div>This is Index </div>
</body></html>DefaultController.cs
Index.cshtml
‫ה‬ ‫של‬ action
controller
‫כמו‬ ‫שם‬ ‫באותו‬ view ‫מחזיר‬
‫חייב‬ ‫כאן‬ view‫ה‬ .action‫ה‬
‫זהה‬ ‫בשם‬ ‫בספריה‬ ‫להיות‬
controller‫ה‬ ‫לשם‬
view ‫ה‬ ‫הצגת‬
natankrasney@gmail.com
11
‫לוחצים‬ index.cshtml ‫בתוך‬ ‫ז"א‬ ASP.Net web pages ‫ב‬ ‫שעשינו‬ ‫כמו‬ ‫בדיוק‬ ‫נעשית‬ Visual Studio ‫דרך‬ View‫ה‬ ‫הצגת‬
: ‫מוצג‬ ‫והדף‬ "View in browser" ‫ואז‬ ‫ימני‬ ‫מקש‬
‫קבלנו‬ ‫שם‬ - ASP.Net Web Page ‫על‬ ‫בפרק‬ ‫דומה‬ ‫דבר‬ ‫עשינו‬ ‫כאשר‬ ‫שקבלנו‬ URL‫מה‬ ‫שונה‬ URL ‫שה‬ ‫לב‬ ‫לשים‬ ‫חשוב‬
? ‫כאן‬ ‫קרה‬ ‫מה‬ .cshtml‫ה‬ ‫דף‬ ‫של‬ url‫ה‬ ‫את‬ ‫בדפדפן‬ ‫הכתובת‬ ‫בשורת‬
"‫ז‬ .DefaultController ‫של‬ Index ‫לפונקציה‬ Default ‫בספריה‬ ‫שנמצא‬ Index.cshtml ‫בין‬ 1:1 ‫מיפוי‬ ‫יש‬ ASP.Net MVC‫ב‬
‫לקליינט‬ ‫הזה‬ view‫ה‬ ‫את‬ "‫"מוריד‬ ‫הזה‬ action ‫ה‬ ‫א‬
? ‫באדום‬ ‫למעלה‬ ‫שהתקבל‬ URL ‫ה‬ ‫של‬ ‫המשמעות‬ ‫מה‬ ‫אבל‬
ASP.Net Routing
cshtml ‫קובץ‬ ‫לדוגמא‬ ‫השרת‬ ‫על‬ ‫לקבצים‬ ‫גישה‬ ‫מבצעים‬ ASP.Net Web Pages , ASP.Net Web Forms , PHP ‫ב‬
.‫שלו‬ URL‫ה‬ ‫באמצעות‬
‫לאתר‬ ‫לגשת‬ ‫נהוג‬ ‫שני‬ ‫מצד‬ .controller ‫של‬ action ‫באמצעות‬ ‫רק‬ ‫אלא‬ cshtml ‫לקובצי‬ ‫ישירות‬ ‫ניגשים‬ ‫לא‬ ASP.MVC‫ב‬
.‫שניהם‬ ‫בין‬ ‫הקשר‬ ‫מה‬ ‫אז‬ URL ‫באמצעות‬
‫בספריה‬ RouteConfig.cs ‫בקובץ‬ ‫מופיע‬ ‫וזה‬ Routing ‫חוקי‬ ‫באמצעות‬ ‫נעשה‬ URL‫ה‬ ‫לבין‬ action ‫ו‬ controller‫ה‬ ‫בין‬ ‫הקשר‬
App_Start
: ‫היא‬ ‫המחדל‬ ‫ברירת‬
url: "{controller}/{action}/{id}",
‫הקודם‬ ‫בשקף‬ URL‫ב‬ ‫שראינו‬ ‫מה‬ ‫ברור‬ ‫ולכן‬ URL‫מה‬ ‫כחלק‬ ‫מופיעים‬ action‫ו‬ controller ‫שה‬ ‫רואים‬ ‫פה‬
/Default/Index
Index ‫בשם‬ (‫)פונקציה‬ action ‫מופעל‬ ‫ובו‬ DefaultController ‫את‬ ‫מפעילה‬ ‫הזה‬ URL‫ל‬ ‫גישה‬natankrasney@gmail.com
12
view ‫ל‬ model ‫מעביר‬ controller
namespace MVC_empty.Controllers
{
public class DefaultController : Controller{
// GET: Default
public ActionResult Index(){
List<int> list =new List<int>(){1, 2, 3};
return View(list);}}
}
natankrasney@gmail.com
13
@model List<int>
<html>
<head></head>
<body>
This is Index
@foreach (int item inModel){
<p>@item</p>}
</body></html>
DefaultController.cs Index.cshtml
controller ‫ה‬ : ‫העברה‬
‫הזה‬ ‫במקרה‬ - model ‫מעביר‬
‫ה‬ ‫אל‬ List ‫מסוג‬ ‫אובייקט‬
‫אותו‬ ‫ומציג‬ view
‫סוג‬ ‫על‬ : ‫הצהרה‬
view‫שה‬ ‫האובייקט‬
‫להיות‬ ‫חייב‬ .‫לקבל‬ ‫מצפה‬
controller‫שה‬ ‫למה‬ ‫זהה‬
‫מעביר‬
list‫ה‬ ‫על‬ ‫לולאה‬ : ‫שימוש‬
controller‫מה‬ ‫שהתקבל‬
ViewBag ‫באמצעות‬ view ‫ל‬ controller ‫מ‬ ‫מידע‬ ‫העברת‬
View ‫לפונקציה‬ ‫פרמטר‬ ‫באמצעות‬ view‫ל‬ ‫מידע‬ ‫להעביר‬ ‫יכול‬ controller‫שה‬ ‫ראינו‬
‫צורך‬ ‫ללא‬ ‫דינמיות‬ properties‫ל‬ ‫השמה‬ ‫מאפשר‬ ‫אשר‬ ViewBag ‫ב‬ ‫להשתמש‬ ‫יותר‬ ‫נוח‬ ‫לפעמים‬
‫בקומפילציה‬
‫טפסים‬ ‫על‬ ‫הבאה‬ ‫בדוגמה‬ ViewBag ‫ב‬ ‫שימוש‬ ‫נראה‬
‫לדוגמא‬ ‫שנבחר‬ ‫שם‬ ‫בכל‬ ‫להשתמש‬ ‫היה‬ ‫אפשר‬ ‫אבל‬ ViewBag.Error ‫ב‬ ‫משתמשים‬ ‫בדוגמה‬
ViewBag.ErrorNathan
natankrasney@gmail.com
14
ActionResult
‫עוד‬ ‫אלו‬ View() ‫מחזירים‬ ‫שאנו‬ ‫וראינו‬ ActionResult ‫מחזיר‬ controller ‫של‬ action ‫ש‬ ‫ראינו‬
: ‫יש‬ ‫חשובות‬ ‫אופציות‬
natankrasney@gmail.com
15
‫הסבר‬ type - ‫סוג‬ ‫של‬ helper - ‫פונקציה‬
Controller ‫המחלקה‬
View ‫מחזיר‬ ViewResult View()
View ‫של‬ ‫חלק‬ - PartialView ‫מחזיר‬ PartialViewResult PartialView()
‫לתשובה‬ ‫מתאים‬ .‫פשוט‬ ‫טקסט‬ - Content ‫מחזיר‬
AJAX ‫לפנית‬
ContentResult Content()
‫אחר‬ action ‫ל‬ ‫מפנה‬ RedirectToAction RedirectToAction()
‫לפנית‬ ‫מתאים‬ - json ‫ומחזיר‬ ‫אוביקט‬ ‫מקבל‬
AJAX
Json Json()
‫נמצא‬ ‫לא‬ ‫כשהמשאב‬ ‫מוחזר‬ HttpNotFound HttpNotFound()
Action ‫ל‬ ‫פרמטרים‬
‫ו‬ Form ‫המאפינים‬ ‫בעזרת‬ Request ‫ב‬ ‫לטפל‬ ‫איך‬ ‫ראינו‬ ASP.Net Web Pages ‫ב‬
.QueryString
action ‫ל‬ ‫כפרמטרים‬ ‫שלו‬ key,value ‫של‬ ‫האוסף‬ ‫את‬ ‫וממפה‬ Request ‫ב‬ ‫מטפל‬ MVC
action ‫ל‬ ‫פרמטר‬ ‫כשם‬ ‫גם‬ ‫להופיע‬ ‫צריך‬ Request‫ב‬ ‫שמופיע‬ key ‫אותו‬ : ‫חשוב‬
natankrasney@gmail.com
16
‫בטופס‬ ‫כמו‬ type ‫עם‬ Action ‫ל‬ ‫לפרמטרים‬ ‫דוגמא‬
<form method="post" action="/Books/Create">
book name : <input type="text"
name="name"/> <br/>
number of pages : <input type="number"
name="numberOfPages" step="1"/> <br />
<input type="submit" value="Create
Book"/>
</form>
natankrasney@gmail.com
17
[HttpPost]
public ActionResult Create(int numberOfPages ,
string name)
{
.
return RedirectToAction("Index");
}
BooksController.cs
cshtml ‫קובץ‬
ViewModel
- ‫כמחלקה‬ ‫ממומש‬ ‫אחד‬ ‫שכל‬ ‫ולקוחות‬ ‫סרטים‬ ‫עם‬ ‫וידאו‬ ‫ספרית‬ ‫של‬ ‫אתר‬ ‫לנו‬ ‫שיש‬ ‫נניח‬
Model ‫מ‬ ‫חלק‬ ‫זה‬ - Movie,Customer
view ‫ל‬ Movie ‫אובייקט‬ ‫מעבירים‬ ‫אז‬ ‫ספר‬ ‫להציג‬ ‫רוצים‬ ‫אם‬
view ‫ל‬ Movie ‫של‬ list ‫לדוגמא‬ ‫מעבירים‬ ‫אז‬ ‫סרטים‬ ‫רשימת‬ ‫להציג‬ ‫רוצים‬ ‫אם‬
? ‫הלקוחות‬ ‫ורשימת‬ ‫הסרטים‬ ‫רשימת‬ ‫את‬ view ‫לאותו‬ ‫להעביר‬ ‫רוצים‬ ‫אם‬ ‫עושים‬ ‫מה‬
‫מתחת‬ ‫אלא‬ Models ‫ל‬ ‫מתחת‬ ‫בפרויקט‬ ‫יהיה‬ ‫לא‬ ‫זה‬ - ‫האלה‬ ‫השדות‬ ‫עם‬ ‫מחלקה‬ ‫מגדירים‬
‫)למרות‬ view model ‫נקראת‬ ‫אלא‬ Model ‫לא‬ ‫היא‬ ‫הזו‬ ‫המחלקה‬ . ViewModels ‫לספריה‬
(.… @Model ‫בעזרת‬ ‫אליה‬ ‫נתייחס‬ razor‫ה‬ ‫שבקובץ‬
natankrasney@gmail.com
18
ASP.Net MVC ‫ב‬ ‫בטפסים‬ ‫שימוש‬
‫וקוד‬ ‫בזמן‬ ‫חוסך‬ ‫וזה‬ ‫ים‬ - helper ‫בעזרת‬ ‫ובולידציה‬ ‫בטפסים‬ ASP.Net MVC ‫ב‬ ‫להשתמש‬ ‫ניתן‬
.‫האלה‬ ‫ים‬ - helper ‫ה‬ ‫של‬ ‫מדוקדק‬ ‫לימוד‬ ‫דורש‬ ‫אבל‬
helper ‫ללא‬ ‫בדוגמה‬ ‫נתחיל‬ ASP.Net MVC ‫ב‬ ‫ים‬ - helper‫ב‬ ‫השימוש‬ ‫את‬ ‫להבין‬ ‫שנוכל‬ ‫מנת‬ ‫על‬
‫ים‬ -
: ‫הבא‬ ‫בלינק‬ ‫מופיע‬ ‫הדוגמא‬ ‫של‬ source code‫ה‬
https://github.com/NathanKr/VS2015GitRep/tree/master/Telrad/Web/ASP.net/MV
C/MVC_empty
natankrasney@gmail.com
19
DoesBookExist - ‫טפסים‬ ‫דוגמה‬
[HttpGet] //this is default
public ActionResult DoesBookExist()
{
return View();
}
natankrasney@gmail.com
20
<html><head><style>p { color: red;}
</style></head>
<body>
<form method="get"
action="/Default/HandleDoesBookExist">
<input type="text" name="book_name"/>
<p>@ViewBag.Error</p>
<input type="submit" value="Submit">
</form ></body></html>
DefaultController.cs
DoesBookExist.cshtml
‫שם‬ ‫אותו‬ ‫בעל‬ view ‫מפעיל‬
‫ז"א‬ action ‫ה‬ ‫כמו‬
doesbooxexist.cshtml
‫ידי‬ ‫על‬ ‫ממופה‬ URL ‫ה‬
‫בשם‬ controller ‫ל‬ router‫ה‬
‫בשם‬ action‫ול‬ Default
HandleDoesBookExist
HandleDoesBookExist - ‫טפסים‬ ‫דוגמה‬ ‫המשך‬
[HttpGet] //this is default
public ActionResult HandleDoesBookExist(string book_name){
bool bIsValid = book_name.Length > 0;// --- some kind of
validation to show what is done
if (!bIsValid){ViewBag.Error = "name is not valid";
return View("DoesBookExist");}
bool bDoesExist = Utils.DoesBookExist(Server,book_name);
return View(bDoesExist);}
natankrasney@gmail.com
21
@model bool
<html><head></head>
<body>
@if(Model){
<p>book exists</p>}
else{
<p>book does not exist</p>}
</body></html>
DefaultController.cs HandleDoesBookExist.cshtml‫ה‬ ‫כמו‬ ‫שם‬ ‫אותו‬ ‫בעל‬ view ‫מפעיל‬
action
‫זהה‬ ‫להיות‬ ‫חייב‬
form ‫ב‬ name‫ל‬
Html.BeginForm - ‫בעזרת‬ ‫טופס‬ ‫יצירת‬
[HttpPost]
public ActionResult Create(int numberOfPages , string name)
{
return RedirectToAction("Index");
}
natankrasney@gmail.com
22
<body>
@using (Html.BeginForm("Create", "Books",
FormMethod.Post)){
<Label>Name : </Label><input type="text"
name="name" /> <br />
<Label>Pages : </Label><input
type="number" name="numberOfPages" step="1"
/> <br />
<input type="submit" value="Create Book" />
}
</body>
BooksController.cs
‫טופס‬ ‫עם‬ cshtml ‫קובץ‬
Method , Action , Controller ,
‫לקליינט‬ Content ‫מחזירה‬ ‫אשר‬ MVC ‫ל‬ AJAX ‫פנית‬
<body>
<button type="button" onclick="loadDoc()">Request data using
AJAX</button><p id="demo"></p><script>
function loadDoc(){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
document.getElementById("demo").innerHTML = this.responseText;}};
xhttp.open("GET", "/Default/HandleAjax?key=11");xhttp.send();}</script>
</body>
natankrasney@gmail.com
23
public ActionResult HandleAjax(string key)
{
return Content("OK");
}
DefaultController.cs
‫מה‬ ‫כל‬ , cshtml ‫קובץ‬
Web ‫ל‬ ‫ביחס‬ ‫שהשתנה‬
URL‫ה‬ ‫זה‬ Pages
‫לקליינט‬ JSON ‫מחזירה‬ ‫אשר‬ MVC ‫ל‬ AJAX ‫פנית‬
<body><button type="button" onclick="loadDoc()">Request data using
AJAX</button><p id="demo"></p><script>
function loadDoc(){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
var jsonObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = jsonObj.baz;}};
xhttp.open("GET", "/Default/HandleAjax?key=11"); xhttp.send();}
</script></body>
natankrasney@gmail.com
24
public ActionResult HandleAjax(string key)
{
var obj = new {foo = "bar", baz = true};
return Json(obj ,
JsonRequestBehavior.AllowGet);
}
DefaultController.cs
‫מה‬ ‫כל‬ , cshtml ‫קובץ‬
Web ‫ל‬ ‫ביחס‬ ‫שהשתנה‬
URL‫ה‬ ‫זה‬ Pages
‫אוביקט‬ ‫של‬ ‫דינמית‬ ‫יצירה‬
‫לא‬ .Java script‫ל‬ ‫בדומה‬
‫זה‬ ‫במקרה‬ ‫נוח‬ ‫אך‬ ‫הכרחי‬
‫לוקחת‬ Json ‫הפונקציה‬
‫אותו‬ ‫ומעבירה‬ ‫אוביקט‬
‫ללקוח‬ ‫ומחזירה‬ JSON‫ל‬

More Related Content

Similar to ASP.net MVC

DOORS Rhapsody integration via Gateway
DOORS Rhapsody integration via GatewayDOORS Rhapsody integration via Gateway
DOORS Rhapsody integration via GatewayManageware
 
Joomla structur, MVC and layout overrides
Joomla structur, MVC and layout overridesJoomla structur, MVC and layout overrides
Joomla structur, MVC and layout overrides
Itamar Elharar
 
PHP Scalability
PHP ScalabilityPHP Scalability
PHP Scalability
guest2b909d
 
קורס אנדרואיד
קורס אנדרואידקורס אנדרואיד
קורס אנדרואיד
Nathan Krasney
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDEDaniel Cnaan
 
ASP.net Web Pages
ASP.net Web PagesASP.net Web Pages
ASP.net Web Pages
Nathan Krasney
 
Dover is now a Noetix Disributer
Dover is now a Noetix Disributer Dover is now a Noetix Disributer
Dover is now a Noetix Disributer Boaz Dombrover
 
Javascript ajax
Javascript ajaxJavascript ajax
Javascript ajax
Nathan Krasney
 
Object oriented analysis and design by alberta university - Typed
Object oriented analysis and design by alberta university - TypedObject oriented analysis and design by alberta university - Typed
Object oriented analysis and design by alberta university - Typed
Ohad Esperansa
 
הפתרון לאוטומציה עם Bpt
הפתרון לאוטומציה עם Bptהפתרון לאוטומציה עם Bpt
הפתרון לאוטומציה עם Bpt
fcshlom
 
Scm
ScmScm
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדםשנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
Shirly Kamusher
 
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדםשנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
Shirly Kamusher
 
הרצאה מתוקשבת וורדפרס מתקדם
הרצאה מתוקשבת וורדפרס מתקדםהרצאה מתוקשבת וורדפרס מתקדם
הרצאה מתוקשבת וורדפרס מתקדםShirly Kamusher
 
יוני ברק הכשרה ביטוח
יוני ברק הכשרה ביטוחיוני ברק הכשרה ביטוח
יוני ברק הכשרה ביטוחAnochi.com.
 
DLL מדריך לעבודה עם
DLL מדריך לעבודה עםDLL מדריך לעבודה עם
DLL מדריך לעבודה עם
מורן אלקובי
 

Similar to ASP.net MVC (18)

DOORS Rhapsody integration via Gateway
DOORS Rhapsody integration via GatewayDOORS Rhapsody integration via Gateway
DOORS Rhapsody integration via Gateway
 
Joomla structur, MVC and layout overrides
Joomla structur, MVC and layout overridesJoomla structur, MVC and layout overrides
Joomla structur, MVC and layout overrides
 
PHP Scalability
PHP ScalabilityPHP Scalability
PHP Scalability
 
קורס אנדרואיד
קורס אנדרואידקורס אנדרואיד
קורס אנדרואיד
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDE
 
ASP.net Web Pages
ASP.net Web PagesASP.net Web Pages
ASP.net Web Pages
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDE
 
Dover is now a Noetix Disributer
Dover is now a Noetix Disributer Dover is now a Noetix Disributer
Dover is now a Noetix Disributer
 
Javascript ajax
Javascript ajaxJavascript ajax
Javascript ajax
 
Object oriented analysis and design by alberta university - Typed
Object oriented analysis and design by alberta university - TypedObject oriented analysis and design by alberta university - Typed
Object oriented analysis and design by alberta university - Typed
 
הפתרון לאוטומציה עם Bpt
הפתרון לאוטומציה עם Bptהפתרון לאוטומציה עם Bpt
הפתרון לאוטומציה עם Bpt
 
Scm
ScmScm
Scm
 
אחסון מידע - ל-websql ו-indexdb רן בר-זיק
אחסון מידע - ל-websql ו-indexdb רן בר-זיקאחסון מידע - ל-websql ו-indexdb רן בר-זיק
אחסון מידע - ל-websql ו-indexdb רן בר-זיק
 
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדםשנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
 
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדםשנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
שנה ג' - הרצאה מתוקשבת- וורדפרס מתקדם
 
הרצאה מתוקשבת וורדפרס מתקדם
הרצאה מתוקשבת וורדפרס מתקדםהרצאה מתוקשבת וורדפרס מתקדם
הרצאה מתוקשבת וורדפרס מתקדם
 
יוני ברק הכשרה ביטוח
יוני ברק הכשרה ביטוחיוני ברק הכשרה ביטוח
יוני ברק הכשרה ביטוח
 
DLL מדריך לעבודה עם
DLL מדריך לעבודה עםDLL מדריך לעבודה עם
DLL מדריך לעבודה עם
 

More from Nathan Krasney

Introduction to Semantic ui-react
Introduction to Semantic ui-reactIntroduction to Semantic ui-react
Introduction to Semantic ui-react
Nathan Krasney
 
Angular 2 - Typescript
Angular 2  - TypescriptAngular 2  - Typescript
Angular 2 - Typescript
Nathan Krasney
 
Angular 2 binding
Angular 2  bindingAngular 2  binding
Angular 2 binding
Nathan Krasney
 
JQuery
JQueryJQuery
ASP.net Security
ASP.net SecurityASP.net Security
ASP.net Security
Nathan Krasney
 
CSS
CSSCSS
Javascript with json
Javascript with jsonJavascript with json
Javascript with json
Nathan Krasney
 
HTML5
HTML5 HTML5
HTML
HTML HTML
Lessons learned from 6 month project with india based software house
Lessons learned from 6 month project with india based software houseLessons learned from 6 month project with india based software house
Lessons learned from 6 month project with india based software house
Nathan Krasney
 
Introduction to big data
Introduction to big data Introduction to big data
Introduction to big data
Nathan Krasney
 

More from Nathan Krasney (11)

Introduction to Semantic ui-react
Introduction to Semantic ui-reactIntroduction to Semantic ui-react
Introduction to Semantic ui-react
 
Angular 2 - Typescript
Angular 2  - TypescriptAngular 2  - Typescript
Angular 2 - Typescript
 
Angular 2 binding
Angular 2  bindingAngular 2  binding
Angular 2 binding
 
JQuery
JQueryJQuery
JQuery
 
ASP.net Security
ASP.net SecurityASP.net Security
ASP.net Security
 
CSS
CSSCSS
CSS
 
Javascript with json
Javascript with jsonJavascript with json
Javascript with json
 
HTML5
HTML5 HTML5
HTML5
 
HTML
HTML HTML
HTML
 
Lessons learned from 6 month project with india based software house
Lessons learned from 6 month project with india based software houseLessons learned from 6 month project with india based software house
Lessons learned from 6 month project with india based software house
 
Introduction to big data
Introduction to big data Introduction to big data
Introduction to big data
 

ASP.net MVC

  • 2. ? MVC ‫זה‬ ‫מה‬ ‫ידוע‬ Software Architectural Pattern ‫הוא‬ MVC ‫באנטרנט‬ ‫תכנות‬ ‫עבור‬ ‫נרחב‬ ‫בשימוש‬ ‫נמצא‬ ‫אבל‬ Desktop ‫לאפליקציות‬ 70‫ה‬ ‫בשנות‬ ‫הומצא‬ ASP.Net MVC , Laravel ‫לדוגמא‬ : ‫להלן‬ ‫מופיעים‬ pattern ‫ה‬ ‫של‬ ‫המרכיבים‬ natankrasney@gmail.com 2
  • 3. Model UI ‫ה‬ ‫מן‬ ‫במנותק‬ ‫האפליקציה‬ ‫של‬ Business Logic ‫ה‬ ‫את‬ ‫מיצג‬ Model ‫האפליקציה‬ ‫של‬ Model ‫ל‬ ‫ולקוח‬ ‫סרט‬ ‫ישתיכו‬ ‫וידאו‬ ‫ספרית‬ ‫של‬ ‫באתר‬ ‫אחד‬ ‫כל‬ class - ‫מחלקה‬ ‫ידי‬ ‫על‬ ‫מיצגים‬ ‫יהיו‬ ‫ולקוח‬ ‫סרט‬ properties - ‫בלבד‬ ‫מידע‬ ‫יכללו‬ ‫האלה‬ ‫המחלקות‬ POCO - Plain Old CLR Object ‫נקרא‬ ‫כזו‬ ‫מחלקה‬ ‫של‬ ‫אוביקט‬ C# ‫בשפת‬ class ‫בעזרת‬ Model ‫מממשים‬ ASP.Net MVC ‫ב‬ : ASP.Net MVC ‫בפרויקט‬ ‫מבנה‬ ●Models ‫בספריה‬ ‫לשים‬ ‫נהוג‬ model ‫שהן‬ ‫מחלקות‬ natankrasney@gmail.com 3
  • 4. Controller Request ‫ה‬ ‫את‬ ‫ז"א‬ HTTP ‫בקשת‬ ‫את‬ ‫לקבל‬ ‫אחראי‬ storage‫ב‬ ‫לשמור‬ ‫לדוגמא‬ - Request‫ב‬ ‫מטפל‬ Response ‫ה‬ ‫את‬ ‫ז"א‬ HTTP ‫תשובת‬ ‫מחזיר‬ C# ‫בשפת‬ class ‫בעזרת‬ Controller ‫מממשים‬ ASP.Net MVC ‫ב‬ : ASP.Net MVC ‫בפרויקט‬ ‫מבנה‬ ●Controllers ‫בספריה‬ ‫שמים‬ ‫ים‬ - controller‫ה‬ ‫כל‬ ‫את‬ ●DefaultController ‫לדוגמא‬ controller ‫עם‬ ‫להסתיים‬ ‫חייב‬ controller ‫של‬ ‫שם‬ natankrasney@gmail.com 4
  • 5. View ‫בלבד‬ ‫לתצוגה‬ ‫מיועד‬ view ‫ה‬ ‫הלקוח‬ ‫של‬ ‫לדפדן‬ ‫מגיע‬ ‫אשר‬ HTML ‫ה‬ ‫זהו‬ cshtml ‫ובקבצי‬ Razor ‫תחביר‬ ‫בעזרת‬ View ‫מממשים‬ ASP.Net MVC ‫ב‬ ‫פעולות‬ .view ‫ב‬ storage‫מ‬ ‫כתיבה‬ / ‫קריאה‬ ‫כמו‬ ‫פעולות‬ ‫לשים‬ ‫מקובל‬ ‫לא‬ ASP.Net MVC ‫ב‬ controller‫ב‬ ‫יתבצעו‬ ‫כאלה‬ : ASP.Net MVC ‫בפרויקט‬ ‫מבנה‬ ●‫שלה‬ controller‫ה‬ ‫שם‬ ‫כמו‬ ‫ששמה‬ ‫ספריה‬ ‫בתת‬ Views ‫בספריה‬ ‫שמים‬ ‫ים‬ - view‫ה‬ ‫את‬ (‫בהמשך‬ ‫דוגמה‬ ‫)נראה‬ natankrasney@gmail.com 5
  • 6. Controller - ‫סכמטי‬ ‫תיאור‬ : ‫להלן‬ ‫יראה‬ ‫זה‬ ‫אז‬ ‫למשתמש‬ ‫הסרטים‬ ‫את‬ ‫להציג‬ ‫רוצים‬ ‫אם‬ ‫לדוגמא‬ natankrasney@gmail.com 6 HTTP Request to movies server HTTP Response to client Storage
  • 7. MVC ‫יתרונות‬ ‫במערכת‬ ‫המרכיבים‬ ‫בין‬ ‫ברורה‬ ‫הפרדה‬ ‫ז"א‬ Separation Of Concerns ‫מאפשר‬ ‫הקוד‬ ‫של‬ ‫יותר‬ ‫טובה‬ ‫תחזוקה‬ ‫מאפשר‬ ‫במקביל‬ ‫לעבוד‬ ‫יכולים‬ ‫צוותים‬ ‫כמה‬ - ‫מהיר‬ ‫פיתוח‬ ‫מאפשר‬ natankrasney@gmail.com 7
  • 8. ‫עבודה‬ ‫סביבת‬ ‫יותר‬ ‫מתקדמת‬ ‫גירסה‬ ‫או‬ Visual Studio 2015 : ‫הבאה‬ ‫בצורה‬ ‫נעשה‬ ‫מינימלי‬ ASP.Net MVC ‫יצירת‬ File->New->Project->Web->ASP.Net Web Application(.Net Framework) and ok Choose Empty and mark “Add folders and core reference for” MVC natankrasney@gmail.com 8
  • 9. view ‫ו‬ controller ‫יצירת‬ ‫ואז‬ Controller ‫כך‬ ‫ואחר‬ Add ‫ימני‬ ‫מקש‬ Controllers ‫ספרית‬ ‫סימון‬ ‫בעזרת‬ controller ‫ניצור‬ DefaultController ‫בשם‬ ‫ונבחר‬ Mvc 5 Controller - empty ‫נבחר‬ View ‫מחזיר‬ ‫אשר‬ Index ‫בשם‬ Action - ‫פונקציה‬ ‫נוצרה‬ DefaultController ‫המחלקה‬ ‫בתוך‬ ‫בספריה‬ ‫ניצור‬ ‫אותו‬ Index.cshtml ‫ז"א‬ action‫ה‬ ‫כמו‬ ‫שם‬ ‫באותו‬ View ‫היא‬ ‫המחדל‬ ‫ברירת‬ Views ‫ל‬ ‫מתחת‬ Default natankrasney@gmail.com 9
  • 10. ‫תואמים‬ view ‫ו‬ controller ‫קבצי‬ namespace MVC_empty.Controllers { public class DefaultController : Controller{ // GET: Default public ActionResult Index(){ return View(); } }} natankrasney@gmail.com 10 @{Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head><body> <div>This is Index </div> </body></html>DefaultController.cs Index.cshtml ‫ה‬ ‫של‬ action controller ‫כמו‬ ‫שם‬ ‫באותו‬ view ‫מחזיר‬ ‫חייב‬ ‫כאן‬ view‫ה‬ .action‫ה‬ ‫זהה‬ ‫בשם‬ ‫בספריה‬ ‫להיות‬ controller‫ה‬ ‫לשם‬
  • 11. view ‫ה‬ ‫הצגת‬ natankrasney@gmail.com 11 ‫לוחצים‬ index.cshtml ‫בתוך‬ ‫ז"א‬ ASP.Net web pages ‫ב‬ ‫שעשינו‬ ‫כמו‬ ‫בדיוק‬ ‫נעשית‬ Visual Studio ‫דרך‬ View‫ה‬ ‫הצגת‬ : ‫מוצג‬ ‫והדף‬ "View in browser" ‫ואז‬ ‫ימני‬ ‫מקש‬ ‫קבלנו‬ ‫שם‬ - ASP.Net Web Page ‫על‬ ‫בפרק‬ ‫דומה‬ ‫דבר‬ ‫עשינו‬ ‫כאשר‬ ‫שקבלנו‬ URL‫מה‬ ‫שונה‬ URL ‫שה‬ ‫לב‬ ‫לשים‬ ‫חשוב‬ ? ‫כאן‬ ‫קרה‬ ‫מה‬ .cshtml‫ה‬ ‫דף‬ ‫של‬ url‫ה‬ ‫את‬ ‫בדפדפן‬ ‫הכתובת‬ ‫בשורת‬ "‫ז‬ .DefaultController ‫של‬ Index ‫לפונקציה‬ Default ‫בספריה‬ ‫שנמצא‬ Index.cshtml ‫בין‬ 1:1 ‫מיפוי‬ ‫יש‬ ASP.Net MVC‫ב‬ ‫לקליינט‬ ‫הזה‬ view‫ה‬ ‫את‬ "‫"מוריד‬ ‫הזה‬ action ‫ה‬ ‫א‬ ? ‫באדום‬ ‫למעלה‬ ‫שהתקבל‬ URL ‫ה‬ ‫של‬ ‫המשמעות‬ ‫מה‬ ‫אבל‬
  • 12. ASP.Net Routing cshtml ‫קובץ‬ ‫לדוגמא‬ ‫השרת‬ ‫על‬ ‫לקבצים‬ ‫גישה‬ ‫מבצעים‬ ASP.Net Web Pages , ASP.Net Web Forms , PHP ‫ב‬ .‫שלו‬ URL‫ה‬ ‫באמצעות‬ ‫לאתר‬ ‫לגשת‬ ‫נהוג‬ ‫שני‬ ‫מצד‬ .controller ‫של‬ action ‫באמצעות‬ ‫רק‬ ‫אלא‬ cshtml ‫לקובצי‬ ‫ישירות‬ ‫ניגשים‬ ‫לא‬ ASP.MVC‫ב‬ .‫שניהם‬ ‫בין‬ ‫הקשר‬ ‫מה‬ ‫אז‬ URL ‫באמצעות‬ ‫בספריה‬ RouteConfig.cs ‫בקובץ‬ ‫מופיע‬ ‫וזה‬ Routing ‫חוקי‬ ‫באמצעות‬ ‫נעשה‬ URL‫ה‬ ‫לבין‬ action ‫ו‬ controller‫ה‬ ‫בין‬ ‫הקשר‬ App_Start : ‫היא‬ ‫המחדל‬ ‫ברירת‬ url: "{controller}/{action}/{id}", ‫הקודם‬ ‫בשקף‬ URL‫ב‬ ‫שראינו‬ ‫מה‬ ‫ברור‬ ‫ולכן‬ URL‫מה‬ ‫כחלק‬ ‫מופיעים‬ action‫ו‬ controller ‫שה‬ ‫רואים‬ ‫פה‬ /Default/Index Index ‫בשם‬ (‫)פונקציה‬ action ‫מופעל‬ ‫ובו‬ DefaultController ‫את‬ ‫מפעילה‬ ‫הזה‬ URL‫ל‬ ‫גישה‬natankrasney@gmail.com 12
  • 13. view ‫ל‬ model ‫מעביר‬ controller namespace MVC_empty.Controllers { public class DefaultController : Controller{ // GET: Default public ActionResult Index(){ List<int> list =new List<int>(){1, 2, 3}; return View(list);}} } natankrasney@gmail.com 13 @model List<int> <html> <head></head> <body> This is Index @foreach (int item inModel){ <p>@item</p>} </body></html> DefaultController.cs Index.cshtml controller ‫ה‬ : ‫העברה‬ ‫הזה‬ ‫במקרה‬ - model ‫מעביר‬ ‫ה‬ ‫אל‬ List ‫מסוג‬ ‫אובייקט‬ ‫אותו‬ ‫ומציג‬ view ‫סוג‬ ‫על‬ : ‫הצהרה‬ view‫שה‬ ‫האובייקט‬ ‫להיות‬ ‫חייב‬ .‫לקבל‬ ‫מצפה‬ controller‫שה‬ ‫למה‬ ‫זהה‬ ‫מעביר‬ list‫ה‬ ‫על‬ ‫לולאה‬ : ‫שימוש‬ controller‫מה‬ ‫שהתקבל‬
  • 14. ViewBag ‫באמצעות‬ view ‫ל‬ controller ‫מ‬ ‫מידע‬ ‫העברת‬ View ‫לפונקציה‬ ‫פרמטר‬ ‫באמצעות‬ view‫ל‬ ‫מידע‬ ‫להעביר‬ ‫יכול‬ controller‫שה‬ ‫ראינו‬ ‫צורך‬ ‫ללא‬ ‫דינמיות‬ properties‫ל‬ ‫השמה‬ ‫מאפשר‬ ‫אשר‬ ViewBag ‫ב‬ ‫להשתמש‬ ‫יותר‬ ‫נוח‬ ‫לפעמים‬ ‫בקומפילציה‬ ‫טפסים‬ ‫על‬ ‫הבאה‬ ‫בדוגמה‬ ViewBag ‫ב‬ ‫שימוש‬ ‫נראה‬ ‫לדוגמא‬ ‫שנבחר‬ ‫שם‬ ‫בכל‬ ‫להשתמש‬ ‫היה‬ ‫אפשר‬ ‫אבל‬ ViewBag.Error ‫ב‬ ‫משתמשים‬ ‫בדוגמה‬ ViewBag.ErrorNathan natankrasney@gmail.com 14
  • 15. ActionResult ‫עוד‬ ‫אלו‬ View() ‫מחזירים‬ ‫שאנו‬ ‫וראינו‬ ActionResult ‫מחזיר‬ controller ‫של‬ action ‫ש‬ ‫ראינו‬ : ‫יש‬ ‫חשובות‬ ‫אופציות‬ natankrasney@gmail.com 15 ‫הסבר‬ type - ‫סוג‬ ‫של‬ helper - ‫פונקציה‬ Controller ‫המחלקה‬ View ‫מחזיר‬ ViewResult View() View ‫של‬ ‫חלק‬ - PartialView ‫מחזיר‬ PartialViewResult PartialView() ‫לתשובה‬ ‫מתאים‬ .‫פשוט‬ ‫טקסט‬ - Content ‫מחזיר‬ AJAX ‫לפנית‬ ContentResult Content() ‫אחר‬ action ‫ל‬ ‫מפנה‬ RedirectToAction RedirectToAction() ‫לפנית‬ ‫מתאים‬ - json ‫ומחזיר‬ ‫אוביקט‬ ‫מקבל‬ AJAX Json Json() ‫נמצא‬ ‫לא‬ ‫כשהמשאב‬ ‫מוחזר‬ HttpNotFound HttpNotFound()
  • 16. Action ‫ל‬ ‫פרמטרים‬ ‫ו‬ Form ‫המאפינים‬ ‫בעזרת‬ Request ‫ב‬ ‫לטפל‬ ‫איך‬ ‫ראינו‬ ASP.Net Web Pages ‫ב‬ .QueryString action ‫ל‬ ‫כפרמטרים‬ ‫שלו‬ key,value ‫של‬ ‫האוסף‬ ‫את‬ ‫וממפה‬ Request ‫ב‬ ‫מטפל‬ MVC action ‫ל‬ ‫פרמטר‬ ‫כשם‬ ‫גם‬ ‫להופיע‬ ‫צריך‬ Request‫ב‬ ‫שמופיע‬ key ‫אותו‬ : ‫חשוב‬ natankrasney@gmail.com 16
  • 17. ‫בטופס‬ ‫כמו‬ type ‫עם‬ Action ‫ל‬ ‫לפרמטרים‬ ‫דוגמא‬ <form method="post" action="/Books/Create"> book name : <input type="text" name="name"/> <br/> number of pages : <input type="number" name="numberOfPages" step="1"/> <br /> <input type="submit" value="Create Book"/> </form> natankrasney@gmail.com 17 [HttpPost] public ActionResult Create(int numberOfPages , string name) { . return RedirectToAction("Index"); } BooksController.cs cshtml ‫קובץ‬
  • 18. ViewModel - ‫כמחלקה‬ ‫ממומש‬ ‫אחד‬ ‫שכל‬ ‫ולקוחות‬ ‫סרטים‬ ‫עם‬ ‫וידאו‬ ‫ספרית‬ ‫של‬ ‫אתר‬ ‫לנו‬ ‫שיש‬ ‫נניח‬ Model ‫מ‬ ‫חלק‬ ‫זה‬ - Movie,Customer view ‫ל‬ Movie ‫אובייקט‬ ‫מעבירים‬ ‫אז‬ ‫ספר‬ ‫להציג‬ ‫רוצים‬ ‫אם‬ view ‫ל‬ Movie ‫של‬ list ‫לדוגמא‬ ‫מעבירים‬ ‫אז‬ ‫סרטים‬ ‫רשימת‬ ‫להציג‬ ‫רוצים‬ ‫אם‬ ? ‫הלקוחות‬ ‫ורשימת‬ ‫הסרטים‬ ‫רשימת‬ ‫את‬ view ‫לאותו‬ ‫להעביר‬ ‫רוצים‬ ‫אם‬ ‫עושים‬ ‫מה‬ ‫מתחת‬ ‫אלא‬ Models ‫ל‬ ‫מתחת‬ ‫בפרויקט‬ ‫יהיה‬ ‫לא‬ ‫זה‬ - ‫האלה‬ ‫השדות‬ ‫עם‬ ‫מחלקה‬ ‫מגדירים‬ ‫)למרות‬ view model ‫נקראת‬ ‫אלא‬ Model ‫לא‬ ‫היא‬ ‫הזו‬ ‫המחלקה‬ . ViewModels ‫לספריה‬ (.… @Model ‫בעזרת‬ ‫אליה‬ ‫נתייחס‬ razor‫ה‬ ‫שבקובץ‬ natankrasney@gmail.com 18
  • 19. ASP.Net MVC ‫ב‬ ‫בטפסים‬ ‫שימוש‬ ‫וקוד‬ ‫בזמן‬ ‫חוסך‬ ‫וזה‬ ‫ים‬ - helper ‫בעזרת‬ ‫ובולידציה‬ ‫בטפסים‬ ASP.Net MVC ‫ב‬ ‫להשתמש‬ ‫ניתן‬ .‫האלה‬ ‫ים‬ - helper ‫ה‬ ‫של‬ ‫מדוקדק‬ ‫לימוד‬ ‫דורש‬ ‫אבל‬ helper ‫ללא‬ ‫בדוגמה‬ ‫נתחיל‬ ASP.Net MVC ‫ב‬ ‫ים‬ - helper‫ב‬ ‫השימוש‬ ‫את‬ ‫להבין‬ ‫שנוכל‬ ‫מנת‬ ‫על‬ ‫ים‬ - : ‫הבא‬ ‫בלינק‬ ‫מופיע‬ ‫הדוגמא‬ ‫של‬ source code‫ה‬ https://github.com/NathanKr/VS2015GitRep/tree/master/Telrad/Web/ASP.net/MV C/MVC_empty natankrasney@gmail.com 19
  • 20. DoesBookExist - ‫טפסים‬ ‫דוגמה‬ [HttpGet] //this is default public ActionResult DoesBookExist() { return View(); } natankrasney@gmail.com 20 <html><head><style>p { color: red;} </style></head> <body> <form method="get" action="/Default/HandleDoesBookExist"> <input type="text" name="book_name"/> <p>@ViewBag.Error</p> <input type="submit" value="Submit"> </form ></body></html> DefaultController.cs DoesBookExist.cshtml ‫שם‬ ‫אותו‬ ‫בעל‬ view ‫מפעיל‬ ‫ז"א‬ action ‫ה‬ ‫כמו‬ doesbooxexist.cshtml ‫ידי‬ ‫על‬ ‫ממופה‬ URL ‫ה‬ ‫בשם‬ controller ‫ל‬ router‫ה‬ ‫בשם‬ action‫ול‬ Default HandleDoesBookExist
  • 21. HandleDoesBookExist - ‫טפסים‬ ‫דוגמה‬ ‫המשך‬ [HttpGet] //this is default public ActionResult HandleDoesBookExist(string book_name){ bool bIsValid = book_name.Length > 0;// --- some kind of validation to show what is done if (!bIsValid){ViewBag.Error = "name is not valid"; return View("DoesBookExist");} bool bDoesExist = Utils.DoesBookExist(Server,book_name); return View(bDoesExist);} natankrasney@gmail.com 21 @model bool <html><head></head> <body> @if(Model){ <p>book exists</p>} else{ <p>book does not exist</p>} </body></html> DefaultController.cs HandleDoesBookExist.cshtml‫ה‬ ‫כמו‬ ‫שם‬ ‫אותו‬ ‫בעל‬ view ‫מפעיל‬ action ‫זהה‬ ‫להיות‬ ‫חייב‬ form ‫ב‬ name‫ל‬
  • 22. Html.BeginForm - ‫בעזרת‬ ‫טופס‬ ‫יצירת‬ [HttpPost] public ActionResult Create(int numberOfPages , string name) { return RedirectToAction("Index"); } natankrasney@gmail.com 22 <body> @using (Html.BeginForm("Create", "Books", FormMethod.Post)){ <Label>Name : </Label><input type="text" name="name" /> <br /> <Label>Pages : </Label><input type="number" name="numberOfPages" step="1" /> <br /> <input type="submit" value="Create Book" /> } </body> BooksController.cs ‫טופס‬ ‫עם‬ cshtml ‫קובץ‬ Method , Action , Controller ,
  • 23. ‫לקליינט‬ Content ‫מחזירה‬ ‫אשר‬ MVC ‫ל‬ AJAX ‫פנית‬ <body> <button type="button" onclick="loadDoc()">Request data using AJAX</button><p id="demo"></p><script> function loadDoc(){ var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState === 4 && this.status === 200) { document.getElementById("demo").innerHTML = this.responseText;}}; xhttp.open("GET", "/Default/HandleAjax?key=11");xhttp.send();}</script> </body> natankrasney@gmail.com 23 public ActionResult HandleAjax(string key) { return Content("OK"); } DefaultController.cs ‫מה‬ ‫כל‬ , cshtml ‫קובץ‬ Web ‫ל‬ ‫ביחס‬ ‫שהשתנה‬ URL‫ה‬ ‫זה‬ Pages
  • 24. ‫לקליינט‬ JSON ‫מחזירה‬ ‫אשר‬ MVC ‫ל‬ AJAX ‫פנית‬ <body><button type="button" onclick="loadDoc()">Request data using AJAX</button><p id="demo"></p><script> function loadDoc(){ var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState === 4 && this.status === 200) { var jsonObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = jsonObj.baz;}}; xhttp.open("GET", "/Default/HandleAjax?key=11"); xhttp.send();} </script></body> natankrasney@gmail.com 24 public ActionResult HandleAjax(string key) { var obj = new {foo = "bar", baz = true}; return Json(obj , JsonRequestBehavior.AllowGet); } DefaultController.cs ‫מה‬ ‫כל‬ , cshtml ‫קובץ‬ Web ‫ל‬ ‫ביחס‬ ‫שהשתנה‬ URL‫ה‬ ‫זה‬ Pages ‫אוביקט‬ ‫של‬ ‫דינמית‬ ‫יצירה‬ ‫לא‬ .Java script‫ל‬ ‫בדומה‬ ‫זה‬ ‫במקרה‬ ‫נוח‬ ‫אך‬ ‫הכרחי‬ ‫לוקחת‬ Json ‫הפונקציה‬ ‫אותו‬ ‫ומעבירה‬ ‫אוביקט‬ ‫ללקוח‬ ‫ומחזירה‬ JSON‫ל‬