متدهای اجرایی یا Action Methods در Asp.Net MVC، مسئول پردازش درخواست های کاربر (request) و تولید خروجی یا جواب (response) به آنها هستند. به طور پیش فرض، متدهای اجرایی، خروجی خود را در قالب یک ActionResult بر می گردانند که معمولا برای تولید نما (View) به کار می روند.
برای مثال، کاربر ممکن است آدرس (URL) ای را در مرورگر وارد کرده، بر روی یک لینک کلیک نموده، یک فرم را Submit کند و .... هریک از اعمال فوق، باعث ایجاد یک درخواست (request) و ارسال آن به سرور می شوند. در هر یک از این درخواست ها، اطلاعاتی وجود دارد که چهارچوب کاری MVC از انها، برای فراخوانی و اجرای یک متد هدف، استفاده می کند.
متدهای اجرایی (action methods)، مقصد نهایی درخواست ها (request) در برنامه های تحت وب MVC بوده و از کلاس پایه Controller استفاده می کنند. در این بخش بیایید نگاهی به نحوه و مسیر پردازش درخواست های کاربر (request) در ASP.Net MVC بپردازیم : هنگامی که یک درخواست با مسیر (URL) مثل /Home/Index/ به سرور می رسد، این ماژول UrlRoutingModule است که متوجه شده و تشخیص می دهد، کدام الگوی مسیر تعیین شده (route) در جدول مسیرها، بایستی به درخواست رسیدگی کند.
ماژول UrlRoutingModule، اطلاعاتی که در جدول مسیردهی (Route Table) تعیین کرده ایم را جمع آوری کرده و کنترلر پروسه را به MVC Route Handler انتقال می دهد. ماژول MVC Route Handler، کنترلر (Controller) مناسب را تشخیص داده و پروسه را به MVC Handler که یک مدیریت کننده درخواست های HTTP است، انتقال می دهد. ماژول MVC Handler به اطلاعات فایل RouteData رجوع کرده و کنترلر مناسب جهت پردازش درخواست را انتخاب می کند. سپس توسط Controller Factory، یک نسخه از کنترلر هدف را ایجاد و مقداردهی کرده و عملیات اجرای درخواست را به آن محول می کند. پس از تعیین کنترلر مورد نظر، MVC Handler از طریق رابط کاربری IController Interface دستور اجرای کنترلر را می دهد. در هنگام ایجاد و اجرای کنترلر جدید، کنترلر از کلاس پایه Controller ساخته می شود. متد اجراکننده یک تحریک کننده متد اجرایی یا action invoker تولید می کند که action مناسب و مورد نظر را تعیین و اجرا می کند. در پایان action invoker مجددا اطلاعات فایل Route Data را چک کرده و اگر action، دارای پارامتری باشد، مقادیر آن را دریافت و به اکشن ارسال می کند.
متدهای اجرایی (action)، انواع مختلفی از نتایج خروجی (action result) را بر می گردانند. کلاس Action Result ، کلاس پایه برای تمامی این خروجی ها یا action result ها هستند. در جدول زیر، به تشریح انواع مختلف Action result ها و عملکرد آنها پرداخته ایم :
حال بیایید مجددا نگاهی به کد فایل مثالی که در بخش قبل استفاده کردیم، بیاندازیم. در کد فایل زیر یک کنترلر به نام EmployeeController ایجاد کردیم که دارای یک متد اجرایی به نام Search است :
توضیح : در آدرس URL فوق، کنترلر Employee را فراخوانی کردیم که فقط یک متد اجرایی به نام Search دارد. پارامتر Mark، در انتهای آدرس، به عنوان یک داده به پارامتر String name متد Search ارسال شده و بر روی صفحه نمایش داده می شود.
حال بیایید کنترلر دیگری را به پروژه اضافه کنیم : 1 مرحله: بر روی پوشه Controllers در منوی Solution Explorer کلیک راست کرده و گزینه های Add و سپس Controller را کلیک کنید :
3 مرحله: گزینه “MVC 5 Controller-Empty” را انتخاب کرده و دکمه Add را بزنید. پنجره Add Controller به صورت زیر باز می شود :
4 مرحله: نام کنترلر را CustomController تعیین کرده و دکمه “Add” را بزنید. حال می توانید فایل جدید “CustomerController.cs” که به زبان سی شارپ است را در پوشه Controllers Folder مشاهده کرده و ویژوال استودیو، آن را به صورت زیر جهت ویرایش باز خواهد کرد :
مشابه روش فوق، کنترلر دیگری به نام HomeController را به پروژه اضافه کنید. کد این فایل به صورت زیر خواهد بود :
7 مرحله: مجددا برنامه را اجرا کرده و آدرس +آدرس را فراخوانی کنید. با آدرس فوق، متد GetAllCustomers() کنترلر Customer اجرا می شود :
همچنین می توانید صفحه را به متد اجرایی دیگر در همان کنترلر و یا حتی کنترلر دیگری، انتقال (redirect) کنید. در کد مثال عملی زیر، با تغییر کد کنترلر HomeController به صورت زیر، اجرای برنامه را از کنترلر Customer Controller به کنترلر HomeController انتقال (redirect) داده ایم :