سایر مقالات سری اموزش پروژه محور MVC 5 :
MVC مخفف عبارت model-view-controller است. با استفاده از الگوی MVC پروژه ها یی که ایجاد می شود دارای سختار مناسب ، قابلیت تست پذیری و پشتیبانی آسان خواهند بود . پروژه هایی که بر اساس MVC هستند شامل موارد زیر است:
- مدلها (Model): شامل کلاسهایی است که نماینده داده های برنامه و قسمت اعتبار سنجی می شوند.
- نماها(Views) : فایل های این قسمت برای تولید داینامیک صفحات HTML استفاده می شوند.
- کنترلرها (Controllers): کلاسهایی که درخواستهایی که از طرف مرورگر میآید را مدیریت میکنند، داده را از مدل دریافت میکنند و View مشخصی را برای برگشت دادن پاسخ به مرورگر انتخاب میکنند.
ما در این سری اموزش پروژه محور MVC 5 تمام مفاهیم گفته شده را آموزش میدهیم و نشان میدهیم که چگونه از آنها برای ساخت یک برنامه استفاده کنیم.
شروع اموزش پروژه محور MVC 5
با ساختن یک کلاس کنترلر شروع میکنیم. در قسمت Solution Explorer بر روی Controllers کلیک راست کنید و سپس Add و بعد Controller را کلیک کنید.
در پنجره Add Scaffold بر روی MVC5 Controller-Empty و سپس Add کلیک کنید.
برای کنترلر خود نام انتخاب کنید. مثلا HelloWorldController و سپس بر روی Add کلیک کنید.
توجه داشته باشید که در Solution Explorer یک فایل با نام HelloWorldController.cs و یک فولدر جدید Views\HelloWorld اضافه شده است. کنترلر در محیط برنامه باز میشود.
قطعه کد زیر را در محتوای فایل قرار دهید.
using System.Web; using System.Web.Mvc; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { // // GET: /HelloWorld/ public string Index() { return "This is my <b>default</b> action..."; } // // GET: /HelloWorld/Welcome/ public string Welcome() { return "This is the Welcome action method..."; } } }
متدهای کنترلر یک رشته از HTML را به عنوان نمونه برمیگرداند. نام کنترلر HelloWorldController است و نام اولین متد آن index میباشد. برنامه را اجرا کنید(با کلیک F5 یا Ctrl+F5). در مرورگر در نوار آدرس عبارت HelloWorld را اضافه کنید. صفحه موردنظر در مرورگر مانند شکل زیر خواهد بود.
ASP.NET MVC، بسته URLای که آمده است متدهای مختلفی را فراخوانی میکند. منطق پیشفرض URL در ASP.NET MVC از فرمت زیر برای مشخص کردن کد فراخوانی شده استفاده میکند.
[Controller]/[ActionName]/[Parameters]
شما میتوانید فرمت مورد نظر خود را در فایل App_Start/RouteConfig.cs تنظیم کنید.
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
اموزش پروژه محور MVC 5
وقتی که شما برنامه را اجرا میکنید و URL ای برای آن در نظر نمیگیرید، برنامه به طور پیشفرض طبق شکل بالا از کنترلر Home و متد Index استفاده میکند.
بخش اول URL کلاس کنترلری را که باید اجرا شود مشخص میکند. بنابراین /HelloWorld به کلاس HelloWorldController نگاشت(map) میشود. بخش دوم URL متدی از کلاس را که باید اجرا شود مشخص میکند. بنابراین /HelloWorld/Index باعث میشود متد Index از کلاس HelloWorldController اجرا شود. توجه داشته باشید که ما در مرورگر فقط میتوانیم به آدرس /HelloWorld برویم و متد Index به طور پیشفرض انتخاب میشود. این امر به این دلیل است که متد با نام Index متد پیشفرضی است که بر روی کنترلر فراخوانی میشود. بخش سوم(Parameters) URL به داده route اختصاص دارد. در مورد داده route در قسمتهای بعدی این سری آموزشی صحبت خواهیم کرد.
در مرورگر به آدرس http://localhost:xxxx/HelloWorld/Welcome بروید. متد Welcome اجرا میشود و رشته “This is the Welcome action method” را برمیگرداند. نگاشت(mapping) پیشفرض در MVC به صورت [Controller]/[ActionName]/[Parameters] خواهد بود. برای این URL، کنترلر HelloWorld و Welcome متد اجرایی است. شما هنوز از بخش [Parameters] در URL استفاده نکردهاید.
حال تغییر کوچکی در مثال ایجاد میکنیم به طوری که بتوانیم اطلاعاتی از پارامترها را از URL به کنترلر ارسال کنیم.(به عنوان مثال /HelloWorld/Welcome?name=Scott&numtimes=4). متد Welcome را به صورت زیر به گونهای تغییر دهید شامل دو پارامتر باشد. توجه داشته باشید که کد زیر از مشخصهای از C# به نام optional-parameter استفاده میکند و اگر مقداری را برای پارامتر اختصاص ندهید خودش مقدار ۱ را به آن پارامتر اختصاص میدهد.
public string Welcome(string name, int numTimes = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes); }
برنامه را اجرا کنید و در مرورگر به آدرس :
http://localhost/HelloWorld/Welcome?name=Scott&numtimes=4 بروید. میتوانید از name و numtimes متفاوتی استفاده کنید.
در نمونه بالا بخش سوم از URL استفاده نشده است. پارامترهای name و numtimes به صورت query string ارسال میشوند. علامت سوال ؟ در URL بالا یک جداکننده (separator) است. کاراکتر & نیز query string ها را از هم جدا میکند.
قطعه کد زیر را در متد Welcome قرار دهید:
public string Welcome(string name, int ID = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID); }
برنامه را اجرا کنید و URL زیر را وارد کنید.
http://localhost:xxxx/HelloWorld/Welcome/3?name=Rick
در این حالت بخش سوم URL با پارامتر ID مطابقت مییابد. متد Welcome شامل پارامتری (ID) است که با مشخصههای URL در متد RegisterRoutes مطابقت دارد.
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
در برنامههای ASP.NET MVC معمولا پارامترها را به عنوان route data ارسال میکنند تا به عنوان .query string شما همچنین میتوانید یک مسیر(route) اضافه کنید تا هر دو پارامتر name و numtimes را به عنوان داده مسیر ((route data در URL ارسال کنید. در شاخه App_Start\RouteConfig.cs مسیر Hello را اضافه کنید:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Hello", url: "{controller}/{action}/{name}/{id}" ); } }
برنامه را اجرا کنید و با مرورگر به آدرس /localhost:xxx/HelloWorld/Welcome/Scott/3 بروید.
در بسیاری از برنامههای MVC مسیر پیشفرض به درستی کار میکند. بعدا در این سری آموزشی خواهید آموخت که چگونه داده را با استفاده از model binder ارسال کنید. در این مثالها کنترلر از بخش VC در MVC استفاده میکند که view و controller خواهد بود. کنترلر HTML را به صورت مستقیم برمیگرداند. به طور عادی معمولا تمایلی نداریم که کنترلر، HTML را مستقیما برگرداند زیرا کدنویسی آن زمانبر است. ( اموزش پروژه محور MVC 5 )