
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
آموزش Model Binding در ASP.Net MVC
آموزش Model Binding در ASP.Net MVC :
در این درس به آموزش مفهوم Model Binding در چهارچوب کاری MVC خواهیم پرداخت.
برای درک بهتر مفهوم model binding در ASP.Net MVC، ابتدا بیایید یادآوری کنیم که چگونه در ASP.Net سنتی، مقادیر http request ها را در متدهای اجرایی action method، خوانده و دریافت می کردیم. تصویر زیر، نشان می دهد چگونه با استفاده از شی Request می توانید مستقیما مقادیر درخواست های HttpGET و HttpPOST را در یک action method، خوانده و استفاده نمایید :

همانطور که در تصویر فوق مشاهده می کنید، از شی Request.QueryString و Request(Request.From)، برای دریافت مقادیر درخواست های HttpGET و HttpPOST استفاده کرده ایم.
دسترسی به مقادیر Request ها توسط شی Request Object، یک کار سنگین و زمان بر است. با استفاده از تکنیک model binding، چهارچوب کاری MVC، مقادیر request ها (چه از query string و چه از collection ها) را به پارامترهای متدهای اجرایی (action method) تبدیل می کند. این پارامترها می توانند از نوع داده های معمولی (مثل string، int و ...) و یا داده های پیچیده تر مثل آرایه و اشیاء باشند.
آموزش اتصال (binding) به متغیرهای معمولی :
همانطور که می دانید، روش HttpGET، مقادیر Request ها را به query string یا آدرس صفحه اضافه می کند. چهارچوب کاری MVC، به صورت اتوماتیک مقادیر query string را به پارامترهای action method تبدیل می کند. برای مثال، داده query string با نام “id” در کد مثال زیر، به صورت اتوماتیک به پارامتر id متد اجرایی ()Edit تبدیل خواهد شد :

همچنین می توانید چندین پارامتر با انواع داده ای مختلف را در یک action method داشته باشید. مقادیر query string به صورت خودکار به پارامترهایی متناسب با نام و نوع متغیرها، تبدیل خواهد شد.
برای مثال، در آدرس +آدرس، پارامترهای id و name به صورت خودکار به متد اجرایی ()Edit اضافه خواهند شد :
public ActionResult Edit(int id, string name) { // do something here return View(); }
عملیات binding حساس به حروف کوچک و بزرگ است. بنابراین پارامتر “id” می تواند “ID” یا “Id” نیز باشد.
آموزش Binding به متغیرهای پیچیده Complex :
تکنیک Binding بر روی متغیرها پیچیده تر مثل آرایه یا اشیاء نیز کار می کند. تکنیک Binding در چهارچوب کاری MVC، به صورت اتوماتیک فیلدهای داده ای در یک درخواست HttpPOST Request را به خواص متناظر در یک پارامتر داده ای متد اجرایی تبدیل می کند.
برای درک بهتر مثال می زنیم. دو کلاس زیر را در نظر داشته باشید :
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; } }
اکنون می توانید یک action method تولید نمایید که انواع داده ای Student را به صورت پارامتر دریافت کند. در کد مثال زیر، متد اجرایی Edit توسط HttpPOST به پارامترهای داده ای Student دسترسی خواهد داشت :
[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 به صورت خودکار، مقادیر فرم زیر را در هنگامی که متد Edit با روش POST، فرم را ارسال یا Submit می کند، به پارامترهای نوع داده ای Student متصل خواهد کرد :

بنابراین، به صورت اتوماتیک، زبان MVC مقادیر filed های فرم را به پارامترهای action متصل می کند.
آموزش Binding با استفاده از FromCollection :
می توانید از نوع داده ای FromCollection به جای یک متغیر پیچیده (Complex Type) در پارامتر یک متد اجرایی action method استفاده نمایید. همانند کد زیر، با استفاده از یک متغیر FormCollection، می توانید مقادیر کلیه فیلدها را از فرم دریافت نمایید.

آموزش استفاده از قابلیت اتصال خواص (Bind Attribute) :
همچنین، چهارچوب کاری MVC این امکان را فراهم کرده تا به جای انتخاب کلیه خواص یک مدل، یک یا چند خاصیت مورد نظر خود را جهت اتصال یا Bind، انتخاب نمایید. خاصیت [Bind] امکان تعیین دقیق خاصیت یا خاصیت هایی از یک مدل را که می خواهید تابع متصل کننده مدل، در عملیات اتصال (Binding) قرار دهد یا خیر را فراهم کرده است.
در کد مثال عملی زیر، متد اجرایی Edit، فقط خاصیت های StudentId و StudentName مدل Student را Bind کرده است :
[HttpPost] public ActionResult Edit([Bind(Include = "StudentId, StudentName")] Student std) { var name = std.StudentName; //write code to update student return RedirectToAction("Index"); }
همچنین می توانید همانند کد زیر، یک یا چند خاصیت را به صراحت تعیین کنید تا در عملیات Bind قرار بگیرند :
[HttpPost] public ActionResult Edit([Bind(Exclude = "Age")] Student std) { var name = std.StudentName; //write code to update student return RedirectToAction("Index"); }
خاصیت Bind، سرعت و کارآیی سیستم را با محدود کردن خواص مورد نیاز، بالا می برد.
بررسی عملکرد سیستم اتصال (Binding) :
همانطور که در بخش آموزشی قبل مشاهده کردید، قابلیت Model Binding در MVC، به صورت خودکار، مقادیر یک request را به انواع اشیای داده ای ساده یا پیچیده تبدیل می کند. عملیات Model Binding یک پروسه دو مرحله ای است. در مرحله اول، مقادیر را از Request ورودی دریافت کرده و سپس متغیرهای ساده یا پیچیده مورد نیاز را با استفاده از مقادیر دریافتی، تولید می کند.
تعیین کنندگان مقادیر (value providers)، مسئول جمع آوری مقادیر و متدهای متصل کننده model binder نیز، مسئول تولید متغیرها بر حسب مقادیر هستند. شکل زبر، نحوه انجام کار را نشان داده است.

تامین کننده های پیش فرض مقدار، values را از منابعی مثل موارد زیر جمع آوری می کنند :
- پارامترهای اتصال شده متدهای اجرایی قبلی، در صورتی که متد مورد نظر، یک متد فرزند باشد.
- فیلدهای فرم (با استفاده از متد Request.Form).
- مقادیر خاصیت ها در یک بدنه JSON Request (با متد Request.InputStream)، البته در صورتی که درخواست از نوع Ajax باشد.
- اطلاعات موجود در مسیر یا Route (با استفاده از متد RouteData.Values).
- پارامترهای موجود در آدرس یا querystring (با استفاده از متد Request.QueryString).
- فایل های POST شده به سرور (توسط متد Request.Files).
چهارچوب کاری MVC شامل کلاس DefaultModelBinder بوده که با کارآیی بالا، اکثر مدل های داده ای را Bind می کند، برای دریافت اطلاعات بیشتر به سایت MSDN مراجعه نمایید.