ASP.NET MVC آموزش c# برنامه نویسی

مفهوم کنترلر در MVC ASP.NET چیست؟

امیرحسین عراقی
نوشته شده توسط امیرحسین عراقی

آشنایی با کنترلر

همان طور که در پست های قبل توضیح داده شد MVC الگویی برای توسعه برنامه های کاربردی است. این الگو از سه بخش تشکیل شده است. بخشی که تصمیم گیری ها و منطق نرم افزار در آن نوشته میشود قسمت کنترلر است. در این فصل مباحث مربوط به بخش کنترلر را با تمرین هایی آموزش خواهیم داد. ابتدا به سراغ ساخت یک کنترلر در برنامه رفته و مراحل ایجاد آن را توضیح خواهیم داد. برای این منظور
١- ابتدا به سراغ پنجره Solution Explorer رفته و روی پوشه کنترلر راست کلیک کنید. سپس از منوی ظاهر شده گزینه Add و سپس کنترلر را انتخاب کنید تا کلاس کنترلر در برنامه ایجاد شود.

2 –  گزینه Add Empty  را از پنجره ی Add Scaffold انتخاب می کنیم

add controller

3- نام آن را مانند زیر عوض می کنیم توجه کنیم که نام باید در انتها کلمه Controller  را حتما داشته باشد مانند HelloWorldController  مثل زیر

add controller

پس از مراحل بالا کلاسی با پسوند cs  در فلدر Controllers ایجاد می شود و همزمان با ایجاد کنترلر  پوشه ای با همین نام نیز در مسیر Views\HelloWorld برنامه ایجاد می شود.
برای شروع کار با این کلاس، ابتدا محتویات کلاس HelloWorldController.cs را حذف و به جای آن، دستورات ذیل را جایگزین کدهای قبلی کنید.


using System.Web; 
using System.Web.Mvc;
 namespace MvcMovie.Controllers 
	public class HelloWorld Controller : Controller
	{
	// GET: Helloworld
	public string Index()
		{
			return "This is my default action...";
		} 
		// GET: HelloWorld/Welcome/ 
		public string Welcome()
		{ 
		return "This is the Welcome action method...";
		} 
	}


در مثال بالا خروجی متدهای کلاس کنترلر از نوع رشته تعریف شده است. همچنین نام اول این متد، Index نامگذاری شده است. کلید F5 یا Ctrl + F5 را برای اجرای برنامه انتخاب کنید. همان طور که در زیر مشاهده می نمایید. آدرس دهی در MVC متفاوت می باشد. در آدرس زیر نام HelloWorld که همان کنترلر برنامه است در آدرس اضافه گردیده است. پس از اجرای برنامه، متدهای این کنترلر تنها یک رشته را برمی گرداند.

قالب آدرس دهی در MVC

قالب آدرس دهی در MVC به صورت زیر تعریف می شود:

[Controller]/[Action Name]/[Parameters]/

کنترلر: ممکن است یک برنامه از تعدادی کنترلر تشکیل شود. اولین بخش مشخص کننده کنترل اجرایی می باشد.در این بخش کنترلر ای که بخواهد اجرا شود مشخص می شود. بنابراین در مثال بالا کليه HelloWorld به کنترلر مربوطه اشاره می کند.
Action Name: هر کنترلر نیز ممکن است از تعدادی متد تشکیل شود. بخش دوم نیز مشخص کننده متد اجرایی می باشد. به این متد رویداد نیز گفته می شود.

نکته: در صورتی که تنها بخش اول آدرس (قسمت کنترلر) انتخاب شود و قسمت های دیگر مانند Action Name انتخاب نشود به طور پیش فرض متد Index موجود در کنترلر مشخص شده اجرا می شود. همانطور که مشاهده می کنید آدرس بالا تنها از بخش کنترلر تشکیل شده است بنابراین متد Index این کلاس به طور پیش فرض اجرا خواهد شد. برای بررسی آدرس ها در نوار آدرس مرورگر وب آدرس زیر را وارد کنید:

http://localhost:xxxx/HelloWorld/Welcome

آدرس بالا باعث اجرا شدن متد Welcome میشود. خروجی این متد از نوع رشته تعریف شده است. همانطور که در شکل زیر مشخص شده است رشته .This is the Welcome Controller method به عنوان خروجی نشان داده شده است.

Parameters: در صورتی که پارامتری برای متد بخواهد ارسال شود در این بخش آدرس مشخص خواهد شد. برای بررسی این نوع آدرس دهی ابتدا دستورات زیر را جایگزین متد Welcome کنید:



<code>public string Welcome(string name, int numTimes = 1) {
return HttpUtility.HtmlEncode('Hello + name + , NumTimes is: ‘‘ + numTimes);
}</code>

 

حال برنامه را دوباره اجرا کرده و آدرس ذیل را در نوار آدرس وارد کنید:

http://localhost:xXXx/Hello world/Welcome?name=Scott&numtimes=4

این کار باعث مقداردهی پارامترهای متد Welcome میشود. همانطور که در آدرس بالا مشخص شده است برای پارامترهای name و numtimes مقادير Scott و ۴ ارسال و در خروجی نیز نمایش داده شده است (شکل زیر ). در این مثال پارامترها از طریق رشته query strings مقداردهی می شوند.

حال متد Welcome را بار دیگر تغییر داده و دستورات زیر را جایگزین کدهای قبلی کنید. در این مثال قصد داریم تا نحوه مقدار دهی پارامترها را تغییر دهیم.


public string Welcome(string name, int ID = 1){
return HttpUtility.HtmlEncode(Hello ، + name + , ID: ،، + ID);
}

 

حال برنامه را با آدرس زیر اجرا کنید:

HTTP://localhost:xXx/HelloWorld/Welcome/3?name=Rick

همانطور که در آدرس بالا مشخص شده است مقدار ۳ برای پارامتر ID بدون در نظر گرفتن ID در نظر گرفته شده است. اگر برنامه را اجرا کنید برنامه به درستی اجرا شده و همانند شکل ، مقدار ۳ برای پارامتر ID مقداردهی می شود.

اگر به سراغ متد RegisterRoutes بروید، نحوه تعریف این نوع آدرس دهی در آن مشخص شده است.

برنامه قرار گرفته است. 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 }
}

</code></pre>

همانطور که در قسمت بالا مشخص شده است در قسمت URL و در بخش انتهایی آدری، ع {id} قرار گرفته است. این کار این امکان را در اختیار کاربر قرار می دهد که پارامتر ID را بدون مشخص کردن نام ID در بخش آدرس مقدار دهی کند و تنها با قرار دادن آدرس

http://localhost:xxx/Helloworld/Welcome3

پارامتر ID برابر با مقدار ۳ مقداردهی گردد.
در این قسمت می خواهیم پارامتر name را نیز مانند روش آدرس دهی بالا از طریق مسیر آدرس مقدار دهی کنیم. برای این منظور:

ابتدا به سراغ کلاس RouteConfig رفته و دستورات مسیر جدید Hello را به متد  RegisterRoutes اضافه کنید.

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}"
		);

		}
	}

 

همانطور که در دستورات بالا مشخص شده است برای آدرس دهی به روش جدید کافی است که در قست Url نام پارامتر را به صورت مشخص شده به آدرس اضافه کنید. حال اگر برنامه را با آدرس

localhost : ccc /HelloWorld/welcome/Scott/3

اجرا کنید. پارامترهای name و id متد welcome با مقادير Scott و ۳ مقداردهی می شوند .برای بسیاری از برنامه های MVC مسیر پیش فرض برنامه مناسب می باشد و نیازی به تغییر این مسیر نمی باشد.

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

امیرحسین عراقی

امیرحسین عراقی

درج دیدگاه