با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش ASP.NET MVC ، را دنبال می کنند. در این آموزش قصد داریم تا شما را با مدل اتصال (Model Binding) در ASP.NET MVC آشنا کنیم. برای فهمیدن و درک Model Binding در ASP.NET MVC یا مدل اتصال در ASP.NET MVC ، ابتدا باید ببینیم که چگونه می شود مقادیر درخواست http را در یک متد اجرایی با استفاده از قالب ASP.NET دریافت کرد. که در ادامه ی مباحث این آموزش به چگونگی انجام اینکار پرداخته ایم.
به شکل زیر توجه کنید که چگونه مقادیر درخواست را با روش های HttpGET و HttpPOST در متد اجرایی دریافت می کنیم:
همانطور که در شکل فوق مشاهده می کنید ما از درخواست های Request.QueryString و Request برای دریافت مقادیر از HttpGet و HttpPOST استفاده می کنیم.
در مدل اتصال (model binding) فریم ورک MVC مقادیر http را به پارامترهای متد اجرایی تبدیل می کند.
درخواست HttpGET اطلاعات را در یک رشته ی پرس و جو قرار می دهد.
MVC به طور خودکار رشته ی پرس و جو را به پارامترهای متد اجرایی تبدیل می کند.
به عنوان مثال، query string “id” در درخواست GET زیر به طور خودکار به پارامتر id از متد اجرایی ()Edit مرتبط می شود:
شما همچنین می توانید چندین پارامتر را در متد اجرایی با انواع داده های مختلف داشته باشید.
مقادیر رشته درخواستی به پارامترها بر اساس نام تطبیق تبدیل می شوند.
برای مثال http://localhost/Student/Edit?id=1&name=John به ID و نام متد اجرایی Edit اشاره دارد:
1 2 3 4 5 6 | public ActionResult Edit(int id, string name) { // do something here return View(); } |
Model binding همچنین برای نوع پیچیده نیز کار می کند.
Model binding در MVC بطور خودکار فیلد داده را از درخواست HttpPOST به پارامتر نوع پیچیده در متد اجرایی تبدیل می کند.
کلاس های زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Student { public int StudentId { get; set; } [Display(Name="Name")] public string StudentName { get; set; } public int Age { get; set; } public Standard standard { get; set; } } public class Standard { public int StandardId { get; set; } public string StandardName { get; set; } } |
اکنون می توانید یک متد اجرایی که شامل نوع پارامتر Student است را ایجاد کنید.
در مثال زیر متد Edit شامل نوع پارامتر Student است:
1 2 3 4 5 6 7 8 9 10 11 12 | [HttpPost] public ActionResult Edit(Student std) { var id = std.StudentId; var name = std.StudentName; var age = std.Age; var standardName = std.standard.StandardName; //update database here.. return RedirectToAction("Index"); } |
بنابراین در حال حاضر، MVC به طور خودکار مقادیر مجموعه فرم را به پارامتر Student هنگامی که فرم درخواست HTTP POST را به متد Edit Action اعمال می کند، ارسال می کند. همانطور که در زیر نشان داده شده است :
بنابراین در نتیجه بطور خودکار فیلدهای فرم به پارامتر نوع پیچیده در متد اجرایی متصل می شود.
همچنین می توانید پارامتر نوع FormCollection را در متد اجرایی به جای نوع پیچیده برای نمایش تمام مقادیر از فیلدهای فرم استفاده کنید:
چارچوب ASP.NET MVC همچنین شما را قادر می سازد که مشخص کنید کدام ویژگی ها را از کلاس مدل می خواهید ارتباط دهید.
Bind به شما اجازه می دهد تا این ویژگی ها را مشخص کنید.
در مثال زیر متد اجرایی تنها اتصال StudentId و StudentName به یک مدل Student را نشان می دهد:
1 2 3 4 5 6 7 8 9 | [HttpPost] public ActionResult Edit([Bind(Include = "StudentId, StudentName")] Student std) { var name = std.StudentName; //write code to update student return RedirectToAction("Index"); } |
همچنین می توانید از ویژگی های Exclude زیر نیز استفاده کنید:
1 2 3 4 5 6 7 8 9 | [HttpPost] public ActionResult Edit([Bind(Exclude = "Age")] Student std) { var name = std.StudentName; //write code to update student return RedirectToAction("Index"); } |
ویژگی Bind عملکرد را با ویژگی هایی که مورد نیاز است بهبود می بخشد.
مدل اتصال به طور خودکار مقادیر درخواست را به یک آبجکت اولیه یا پیچیده تبدیل می کند.
اتصال به مدل یک فرآیند دو مرحله ای است که در مرحله ی اول ارزش ها را از درخواست http ورودی دریافت می کند.
در مرحله ی دوم نوع اولیه یا پیچیده را با این مقادیر جمع می کند.
Value provider مقادیر را از درخواست دریافت و Model Binders نیز مقادیر را جمع بندی می کنند.
value provider پیش فرض، مقادیر را از منابع زیر جمع آوری می کند:
۱- از یک عمل زیر مجموعه
۲- فیلدهای فرم
۳- مقادیر ویژگی ها در JSON Request
۴- اطلاعات مسیرها
۵- پارامترهای Querystring
۶- فایل های ارسال شده
در مباحث فوق، تا حدودی با کاربردها و چگونگی استفاده از Model Binding در ASP.NET MVC آشنا شدید. در بخش بعدی به چگونگی ایجاد یک نمایه (view) خواهیم پرداخت.