کار با JSON در MVC
دوشنبه 10 خرداد 1395در این مقاله ما یک توضیح مختصر در رابطه با JSON در MVC ارائه خواهیم داد و توضیح می دهیم که چگونه MVC به صورت هوشمندانه این مقوله را مدیریت و کنترل میکند.
JSON (Java Script Object Notation) یک مفهوم مشترک و رایج در برنامه نویسی است که بعنوان یک واسطه برای تبدل اطلاعات از آن استفاده می کنند و سرعت اجرای آن بالا است. JSON یک دستور برای ذخیره و انتقال اطلاعات می باشد و به دلیل اینکه یک Java script object notation است به روش دستورات java script از آن استفاده می شود، همچنین JSON یک زبان مستقل است. فرمت آن به صورت زیر است.
1. {"Books":[ 2. {"name":"Asp.Net Mvc", "code":"111"}, 3. {"name":"Angular Js", "code":"112"}, 4. {"name":"Javascript", "code":"113"}, 5. {"name":"CLR", "code":"114"} 6. ]};
حال شما میتوانید از این شی JSON ایجاد شده، در برنامه ای که با تکنولوژی mvc نوشته شده است استفاده کنید. معمولا هنگامیکه یک ajax call انجام میدهیم ، قطعه کدهای HTML را می گیریم و آنها را به مرورگر می فرستیم یا اینکه به همه ی المانهای DOM ضمیمه میکنیم. این روش قابل قبول است اما فرستادن المان های HTML به همراه اطلاعات شان توصیه نمی شود. بنابراین جالب نیست که اطلاعات را در یک فرمت خاص بفرستیم و مرورگر به آنها قالب HTML بدهد. در این موارد استفاده از JSON پیشنهاد میشود. حال بیایید ببینیم که JSON چگونه این کار را انجام میدهد.
آشنایی با قطعه کدهای JSON :
ما در این مقاله فرض را بر این گذاشته ایم که همه ی خوانندگان گرامی با MVC آشنایی دارند (Model , View & Controller). بنابراین مراحل ابتدایی ایجاد یک پروژه mvc را توضیح نخواهیم داد.
هنگامیکه یک کنترلر در پروژه ی MVC ایجاد می کنیم می دانیم که بعنوان پیش فرض یک متد از نوع ActionResult در کنترلر وجود دارد که برای هر نوع متدی قابل شناسایی است مانند: ViewResult، JsonResult و غیره . بنابراین برای برگرداندن اطلاعاتی از نوع JSON ، میتوانیم هم از ActionResult و هم از JsonResult استفاده کنیم. اما بهتر است که از JsonResult استفاده کنیم که میدانیم چه نوعی را برمی گرداند. JsonResult در واقع نوع خاصی از ActionResult می باشد که به ViewEngine پیشنهاد میکند که به جای یک HTML معمولی یک شی از نوع JSON برگرداند.
1. using System; 2. using System.Collections.Generic; 3. using System.Linq; 4. using System.Web; 5. using System.Web.MVC; 6. using DemoJsonTest.Models; 7. namespace DemoJsonTest.Controllers { 8. public class EmployeeController : Controller { 9. private Employee[] employeeData = { 10. new Employee {Name:"Samane Samadi",EmpCode:"EMP042"}, 11. new Employee {Name:"Samane Shahsavar",EmpCode:"EMP044"}, 12. new Employee {Name:"Samane Rahmani",EmpCode:"EMP041"} 13. }; 14. public ActionResult Index() { 15. return View(); 16. } 17. public JsonResult GetEmployeeDataJson(string empCode) { 18. var employee = employeeData.Where(emp => 19. emp.EmpCode == empCode).SingleOrDefault(); 20. return Json(employee, JsonRequestBehaviour.AllowGet); 21. }
در قطعه کد بالا یک کنترلر معمولی نمایش داده شده است که در constructor آن، یک مدل با نام Employee با یک سری اطلاعات پر شده است. سپس در قسمت اصلی کنترلر که JsonReult method می باشد اطلاعات انتقال داده شده را بوسیله ی EmpCode فیلتر کرده ایم و در نهایت یک شی از نوع Json برگردانده خواهد شد. در قطعه کد بالا دستور JsonRequestBehaviour.AllowGet وجود دارد که مفهوم جالبی دارد. معمولا مرورگرها از ورود سایت های مخربی که سعی در بدست آوردن اطلاعات بازگشتی از JSON دارند جلوگیری میکند و بطور پیش فرض در پاسخ به GET request هیچ چیزی برنمی گرداند.
System.InvalidOperationException: این دستور قفل شده است تا اطلاعات مهم و حیاتی با استفاده از دستور GET request در اختیار سایت های دیگر قرار نگیرند. برای اینکه برنامه اجازه ی پاسخ به دستور GET requests را داشته باشد باید AllowGet را در دستور JsonRequestBehavior تنظیم کنیم.
معمولا ما از آپشن های ajax مانند success method استفاده میکنیم تا اطلاعات JSON را که از یک GET request دریافت کرده ایم ، پردازش کنیم و به المان های HTML DOM اضافه کنیم.
بنابراین در قطعه کد بالا اطلاعات با فرمت JSON را که در پاسخ دستور GET دریافت کرده بودیم، واکشی میکنیم و در جدول html dom ضمیمه میکنیم.
نکته ی قابل توجه این است که هنگامیکه ما یک مدل را به یک شی JSON تبدیل میکنیم تعداد مشخصی از property های مدل را نگه میداریم و سایر property های آن را از دست میدهیم، در حالیکه فریم ورک MVC به اندازه کافی باهوش است که ابتدا مدل را با همه ی property هایش به JSON تبدیل کند و سپس به property های که ما از دست داده ایم مقدار دهی پیش فرض کند. به قطعه کد زیر توجه کنید.
{ "EmployeeId":0, "Name":"Suraj Sahoo", "EmpCode":"042", "IsActiveEmployee": false, "DepartmentId": null }
با توجه به قطعه کد بالا مشاهده میکنید که ما تنها Name و EmpCode را مقداردهی کرده بودیم و سایر مقادیر بعد از تبدیل شدن به JSON به صورت پیش فرض توسط MVC smart framework مقداردهی شده است.
در این مقاله ما یک توضیح مختصر در رابطه با JSON در MVC ارائه دادیم و توضیح دادیم که چگونه MVC به صورت هوشمندانه این مقوله را مدیریت و کنترل میکند. این مطلب به ما در هنگام استفاده از APIکمک می کند و خروجی را به JSON و XML تبدیل می کند و اطلاعات را نمایش می دهد. در واقع JSON نوعی دیگر از فرم XML برای تبادل اطلاعات است. برای مثال امروزه در رابطه با angular JS عملیاتی که صورت میگیرد به این شکل است که از یک API controller استفاده میکند و خروجی را به صورت اطلاعاتی از نوع JSON برمیگردانند و از مزیت های Angular با دو روش binding بهره می برند.
آموزش asp.net mvc
- ASP.net MVC
- 4k بازدید
- 6 تشکر