آشنایی با ASP.Net MVC

در این مقاله به بررسی MVC و تفاوت آن با ASP.NET می پردازیم و ویژگی ها و مزایایی که در این الگوی برنامه نویسی جدید وجود دارد را مورد بررسی قرار میدهیم.

آشنایی با ASP.Net MVC

ASP.NET MVCچیست؟

Model-View-Controller) MVC) یک الگوی برنامه نویسی است که برنامه را به سه قسمت اصلی زیر تقسیم میکند.

1.Model

2. View

3.Controller

فریم ورک ASP.NET MVC یک الگوی برنامه نویسی جدید و جایگزین الگوی برنامه نویسی ASP.NET Web Forms برای ایجاد وب سایت، می باشد. فریم ورک ASP.NET MVC یک فریم ورک سبک و آزمون پذیر می باشد که در خود ویژگی های ASP.NET مانند master page و membership-based authentication را به همراه دارد. فریم ورک MVC در اسمبلی System.Web.Mvc تعریف شده است که از همه ی کنترلرهای HTML، جاوا اسکریپت و CSS پشتیبانی میکند. همچنین این فریم ورک برای پروژه هایی که به صورت تیمی بر روی آنها کار میشود مناسب تر است.

الگوی طراحی MVC

مزایای استفاده از وب سایت هایی که براساس MVC طراحی شده اند

استفاده از فریم ورک MVC مزایای زیر را بدنبال خواهد داشت :

_باعث میشود که بتوانید یک برنامه ی  پیچیده را به راحتی با استفاده از تقسیم برنامه به سه بخش Model، View و Controller مدیریت کنید.

_ در آن از view state و فرم های سمت سرور (server_based_forms) استفاده نمیشود.

_ پشتیبانی از تمام کنترل های ,HTML  JavaScript  و  CSS.

_ پشتیبانی بهتر از Test-Driven Development (TDD) .

_ این فریم ورک از وب سایت هایی که به صورت گروهی (Team work) برنامه نویسی میشوند به خوبی پشتیبانی میکند و به طراحان (designer) اجازه می دهد که بر روی رفتار برنامه، سطح بالاتری از کنترل را داشته باشند.

_ به صورت پیش فرض از Facebook و google پشتیبانی میکند.

_ برنامه های بزرگ را به چند Area تقسیم میکند که باعث میشود مدیریت آنها آسان باشد.

  رفرنس فضاهای نام در ASP.NET MVC

_System.Web.Mvc

این فضای نام شامل کلاسها و اینترفیس هایی است که ازMVC  در برنامه های تحت وب پشتیبانی میکند. همچنین این فضای نام کنترلرها ، controller factories ، action results ، views ، partial views و model binders را نمایش میدهد.

_System.Web.Mvc.Ajax

این فضای نام شامل کلاسهایی میباشد که از Ajax scripts در برنامه های تحت ASP.NET MVC  پشتیبانی میکند. این فضای نام همچنین از گزینه های مربوط به تنظیمات Ajax علاوه بر Ajax scripts پشتیبانی میکند.

  _System.Web.Mvc.Async

این فضای نام شامل کلاسها و اینترفیس هایی میباشد که از asynchronous action در ASP.NET MVC application پشتیبانی میکند.

_System.Web.Mvc.Html

این فضای نام شامل کلاسهایی می باشد که به اجرای کنترلهای HTML در برنامه های MVC کمک میکند. این فضای نام شامل کلاسهایی میباشد که از form ، input control ، link ، partial view و validation پشتیبانی میکند.

تفاوت میان ASP.NET MVC و Web Formها

Solution در ASP.NET MVC Application

یک Solution در ASP.NET MVC به سه فولدر کوچکتر با Model ، View و Controller تقسیم میشود همچنین فولدرهای دیگری برای فایل های script و App_Start  و چیزهای دیگر در پروژه وجود دارد.

1.Model

Model برای ذخیره اطلاعات کلاسها (Data Classes) استفاده میشود که ممکن است این کلاس با استفاده از LINQ به SQL ایجاد شده باشد ، یا Entity Framework باشد یا ممکن است به سرویس های  WCF یا هر تکنولوژی دیگری ارجاع داده شده باشد. در نهایت  Model برای نمایش اطلاعات یک View/Partial View  مورد استفاده قرار می گیرد.

2.View

فولدر View صفحاتی از نوع view و partial view را ذخیره میکند که هر کدام از آنها برای action مشخصی در Controller تعریف شده است. فولدر مربوط به view شامل یک فولدر به نام shared folder می باشد که صفحات و user controlهایی که در داخل آن وجود دارد به طور مشترک در دسترس همه ی کنترلرها قرار میگیرد. هر در خواستی که از طرف action method ها برای یک صفحه ی  view یا partial view فرستاده می شود در صفحه ی extention که در داخل shared folder قرار دارد نیز بررسی میشود.

3. Controller

Controller برای ذخیره سازی Business Logic Class مورد استفاده قرار میگیرد. کنترلرها مجموعه ای از کلاسها و child  کلاسها از کلاس System.Web.Mvc.Controller می باشد. یک کلاس کنترلر شامل چند متد از نوع Action method می باشد که وظیفه اش برگرداندن یک view ، partial view ، Content ، JASON Data و ... است.

Action

Action Action ها یک نوع مشخص از متدها هستند که برای انجام کار مشخصی در آنها کدنویسی میکنیم و نتیجه را به کاربر برمیگرداند که نتیجه ی موردنظر میتواند در قالب یک page یا partial page (user controlها) باشد. هر action  دو نوع HTTP Request را در خود نگه میدارد.

1. [HttpGet]

[HttpGet] action   برای کنترل و مدیریت درخواست هایی است که به صورت مستقیم از طرف کاربر به برنامه ارسال میشود و در واقع میتوانیم بگوییم این درخواست ها برای اولین بار به یک Action method ارسال میشود.

2.  [HttpPost]

این نوع actionها تنها زمانی صدا زده میشوند که از قبل یک view در سمت client وجود داشته باشد و کاربر از یک دکمه که در قسمت html طراحی شده است برای ارسال اطلاعات استفاده کرده باشد. بنابراین زمانی که این نوع از actionها فراخوانی میشوند تمامی control's valueهایی که در یک شی از نوع FormCollection از فرم HTML برگردانده خواهد شد.

یک action ممکن است از چندین نوع type بازگشتی برای برگرداندن اطلاعات و مقادیر مختلف به کاربر استفاده کند. ما انواع مختلفی برای برگرداندن نتیجه از action  متد به کاربر داریم اما در بیشتر مواقع از ActionResult استفاده میکنیم زیرا این نوع از actionها یک نوع مادر برای همه آنها محسوب میشود و انواع دیگر actionها میتوانند در یک Action Method بعنوان مقدار بازگشتی مورد استفاده قرار بگیرند.

ActionResult یک کلاس مجازی است که میتواند چندین subtype در خود داشته باشد.

ActionResult Subtypes :

Areaها در ASP.NET MVC

ASP.NET MVC 2.0 Microsoft یک ویژگی جدید به نام Area در نرم افزارها و برنامه هایی که با استفاده از  mvc نوشته شده است ایجاد کرده است. Areaها برای تقسیم کردن یا "isolate" مدل های یک برنامه ی بزرگ به چند بخش کوچکتر یا جداگانه مورد استفاده قرار میگیرد.

هنگامیکه میخواهید یک  area را به پروژه ای اضافه کنید، یک ریشه (ruote) برای آن در فایل AreaRegistration تعریف میشود. Ruote مورد نظر درخواستهای مربوط به area را با توجه به URL انها به area ارسال میکند. برای ثبت ruoteهای area ها شما باید کد زیر را در فایل Global.asax اضافه کنید تا  به صورت خودکار ruote های  area در فایل AreaRegistration پیدا میکند.

AreaRegistration.RegisterAllAreas();  

Request Life cycle در برنامه های MVC

در یک برنامه mvc هیچ page life cycle مانند ASP.NET Web Forms وجود ندارد. ما در اینجاRequest Life cycle  داریم.

در برنامه های  نوشته شده در mvc، هنگامیکه که کاربر درخواستی به مرورگر ارسال میکند این درخواست توسط IIS مدیریت و کنترل میشود. URL مربوط به این درخواست به صورت زیر خواهد بود:

Http://SiteName/ControllerName/ActionName/ID

در تصویر بالا تنها دو نوع request توضیح داده شده است.

1. این نوع request  یک view برمیگرداند و اطلاعاتی از model در آن وجود ندارد، بنابراین کاربر درخواست میکند که request مورد نظر توسط MVC Handler کنترل شود و سپس به Controller آدرس دهی میشود و در این قسمت شما باید یک Action Method (که همان [HttpGet]است) فراخوانی کنید. اگر این متد یک نمونه از  ViewResult برگرداند یک view مناسب  از View Directory در web site solution پیدا میکند و سپس View Engine (ASPX/RAZOR) در صفحه HTML مربوطه در سایت، برای کاربر view موردنظر را نمایش میدهد.

2.نوع دوم از request هنگامی اتفاق می افتد که کاربر یک view به همراه اطلاعاتی از model را درخواست کند. بنابراین هنگامیکه کاربر یک request از نوع درخواست میکند، این request بوسیله ی MVC Handler کنترل و مدیریت میشود و سپس به سمت controller آدرس دهی میشود سپس یک  Action Method (که همان [HttpGet] است ) فراخوانی می شود. اگر این متد یک نمونه از ViewResult به همراه یک شی از جنس model برگرداند ابتدا از کلاس model یک شی درخواست میشود تا با استفاده از آن بتوانیم با view کار کنیم سپس ما یک نمونه از جنس ViewResult “new ViewResult(ModelObject);“ بر میگردانیم که توسط property مدلی که برای کلاس view است کنترل میشود.

دو رابطه بین model و view وجود دارد :

** binding **

1. Bindingداینامیک

Bindingداینامیک، هنگامی اتفاق می افتد که ما یک شی را به یک شی از جنس کلاس ViewResult  پاس دهیم تا یک شی از جنس view  باز گرداند اما نوع شی موردنظر را در صفحه ی view تعریف نکرده ایم. بنابراین میتوانیم از این شی بوسیله ی reference آن و با توجه به  DLR استفاده کنیم. اما هنگامیکه در حال استفاده از آن با استفاده از property مدل در viewهستیم نمیتوانیم از intelligence که در Visual Studio وجود دارد استفاده کنیم در نتیجه ما تنها زمانی میتوانیم یک عبارت داینامیک بنویسیم که تنها در  "زمان اجرا"  ، اجرا شود.

2. Strongly typed binding

Strongly typed binding هنگامی رخ میدهد که ما یک شی را به یک شی از جنس کلاس ViewResult  پاس دهیم تا یک view را برگرداند اما قبل از آن نیاز داریم که نوع شی موردنظر را در صفحه ی view تعریف کنیم بنابراین میتوانیم این شی را با اطمینان خاطر کنترل و مدیریت کنیم. همچنین میتوانیم این شی را در view استفاده کنیم و از intelligence که در Visual Studio وجود دارد نیز بهره بگیریم.

View Engineها

View Engineها مسئولیت نمایش کدهای HTML موجود در viewها در صفحه مرورگر را بر عهده دارند. الگوی view engine برای اجرا syntax متفاوتی دارد. اخیرا تعدادی view engine در MVC در دسترس قرار گرفته است که بهترین view engineها Razor ، ASPX و ASP.NET هستند همچنین برخی از third-party View Engineها مانند Spark, NHaml هم در MVC پشتیبانی میشوند.

ASPX

ASPX اولین view engine در mvc می باشد. Syntax مربوط به نوشتن viewها در این موتور مانند syntax موجود در ASP.NET Web Formها می باشد. ما نیاز داریم هنگامیکه میخواهیم کدی را در سمت سرور(server-side) بنویسیم یا نیازمند فراخوانی   object property یا متدهای view و والد این متدها هستیم  از “<%: %>” استفاده کنیم. ما تعداد زیادی view extension  برای صفحات داریم که همه ی آنها برای زبانهای server-side ، C# و VB یکسان است.

1..aspx : .aspx یک extension در صفحه view میباشد که در ASP.NET web site نیز چنین صفحه ای وجود داشت.

2..ascx : .ascx یک extension برای یک partial view در ASP.NET MVC میباشد که در ASP.NET از آن بعنوان control user استفاده میکردیم.

3. .master : .master یک extension برای Master Page میباشد که با نامی مشابه در ASP.NET نیز موجود بود.

RAZOR

Razor view engine یک view engine پیشرفته میباشد که توسط Microsoft در ASP.NET MVC ارائه شده است و اولین بار در نسخه ی  MVC 3 بکار برده شد. درRazor از کاراکتر  “@” به جای “<%: %>” در aspx's View Engine استفاده میشود. درRazor نیازی نمیباشد که مشخص کنید که کد شما کجا بسته شده است زیرا این view engine بطور هوشمند در هنگام اجرا تشخیص خواهد داد که کدام المان برای نمایش و کدام المان ها مختص کد هستند.

به نظر بسیاری از برنامه نویسان Razor بهترین view engine در mvc میباشد چرا که کدنویسی در آن بسیار خواناتر و تمیزتر از سایر view engine میباشد. این view engine کامل ترین نوع view engine توسط unit testing frameworks شناخته شده است.

این view engine به صورت پیش فرض در MVC 3.0, MVC 4.0 و همچنین در MVC 5.0 برای view page تنظیم شده است. ما دو نوع صفحه ی extension دیگر در C#/VB  داریم  که میتوانیم از آنها نیز برای ایجاد view, partial view یا Layout (Master) pages استفاده کنیم.

_ .cshtml:  از زبان C# بعنوان زبان پیش فرض در برنامه های ASP.NET MVCبرای انواع مختلف صفحات مانند  View, partial page و layout page استفاده میکنیم.

_ .vbhtml : ما از زبان VB بعنوان زبان پیش فرض در برنامه های ASP.NET MVC برای انواع مختلف صفحات مانند  View, partial page و layout page استفاده میکنیم.

آموزش asp.net mvc

دانلود نسخه ی PDF این مطلب