تعریف اکشن با نام های یکسان

آموزش MVC –> جلسه اول –> قسمت یازدهم

در مبحث Object Oriented میتوان دو تابع تعریف کرد با نام یکسان و Signature (پارامتر ورودی) متفاوت . اما در MVC اگر دو اکشن زیر را تعریف و اجرا کنیم پیغام خطا میدهد :

 
[System.Web.Mvc.HttpGet]
public System.Web.Mvc.ActionResult Learn1270()
{
    return (Content("Hello World!"));
}
[System.Web.Mvc.HttpGet]
public System.Web.Mvc.ActionResult Learn1270(string name)
{
    return (Content("Hello World!"));
}

با اینکه اکشن دوم پارامتر وردی میگیرد و اکشن اول پارامتری ندارد اگر در مرورگر آدرس زیر را وارد کنیم خطا میدهد چون مشخص نیست اکشن اول را صدا زدیم یا دوم را !

http://Mohtava.info/Home/Learn1270

برای حل این مشکل یک روش اینست که یکی از اکشن ها را بصورت get تعریف کنیم یکی را post . بنابراین دو اکشن Learn1280 که در ذیل آمده با خطایی روبرو نمیشوند :

 
[System.Web.Mvc.HttpGet]
public System.Web.Mvc.ActionResult Learn1280()
{
    return (Content("[GET] Hello World!"));
}
[System.Web.Mvc.HttpPost]
public System.Web.Mvc.ActionResult Learn1280(string name)
{
    return (Content("[POST] Hello World!"));
}

روش دیگر اینست که با اتریبیوت ActionName نام اکشن دوم را تغییر بدهیم . در مثال زیر هم نام اکشن ها یکیست هم متدهای آنان . ولی با اتریبیوت مذکور مشکل را حل کرده ایم :

 
[System.Web.Mvc.HttpGet]
public System.Web.Mvc.ActionResult Learn1290()
{
    return (Content("[GET] Hello Ehsan !"));
}
[System.Web.Mvc.HttpGet]
[System.Web.Mvc.ActionName(“Learn_Mohtava”)]
public System.Web.Mvc.ActionResult Learn1290(string name)
{
    return (Content("[GET] Hello Safari !"));
}

امیدوارم این جلسه از سری مقالات وب سایت محتوا برای شما مفید بوده باشد . برای کسب اطلاعات بیشتر به وب سایت asp.net مراجعه شود . 

در جلسه دوازدهم با مفهوم کش cache آشنا می شویم . 


تاریخ انتشار : ۲۵ آذر ۱۳۹۴



دیدگاه ها :