کار با JSON در MVC

دوشنبه 10 خرداد 1395

در این مقاله ما یک توضیح مختصر در رابطه با JSON در MVC ارائه خواهیم داد و توضیح می دهیم که چگونه MVC به صورت هوشمندانه این مقوله را مدیریت و کنترل میکند.

کار با JSON  در 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

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید