تعریف اکشن با پارامتر ورودی

آموزش MVC –> جلسه اول –> قسمت چهارم

تعریف اکشن با پارامتر ورودی :

ارسال پارامتر در اکشن :

در اکشن Learn1010 پارامتر id بصورت int عددی تعریف شده است .بصورت زیر :

      public void Learn1010(int id)
        {
            // Do Something…
        }

 با توجه به اینکه  Primitive type است نمیتواند خالی یا null باشد پس اگر در مرورگر بنویسیم http://localhost:30847/Home/Learn1010 با خطا روبرو میشویم . نحوه نگارش صحیح url به دو صورت زیر می باشد :

http://localhost:30847/Home/Learn1010?id=15

http://localhost:30847/Home/Learn1010/15

نام id پیش فرض است یعنی اگر نام پارامتر ورودی را id قرار دهیم میتوانیم در هنگام فراخوانی نام id را ننویسیم و فقط با یک / مقدار id را وارد کنیم ولی اگر نام دیگری داشته باشد باید حتما نام پارامتر را وارد کنیم . اکشن دیگری تعریف می کنیم بنام Learn1020 و نام پارامتر آنرا number میگذاریم .

    public void Learn1020(int number)
        {
            // Do Something…
        }

پس اگر آدرس را به دو صورت زیر بنویسیم با خطا مواجه می شویم :

 http://localhost:30847/Home/Learn1020 
 http://localhost:30847/Home/Learn1020/15

ولی دو آدرس زیر صحیح (Valid) می باشد :

 http://localhost:30847/Home/Learn1020?number=15
 http://localhost:30847/Home/Learn1020?Number=15

نکته آدرس دوم : نام پارامتر حساس به حروف بزرگ و کوچک نیست (Case Sensitive) مثلا number همان Number است .

اکشن دیگری بنام Learn1030 تعریف میکنیم و دو پارامتر عددی num1 و num2 را ارسال میکنیم :

   public void Learn1030(int num1, int num2)
        {
            // Do Something…
        }

در صورتی که آدرس بصورت زیر باشد Error میدهد :

http://localhost:30847/Home/Learn1030
http://localhost:30847/Home/Learn1030/15
http://localhost:30847/Home/Learn1030?firstNumber=15

علت غلط بودن آدرسهای اول و دوم که در بالا گفته شد . در آدرس سوم هم چون فقط یکی از دو پارامتر مقداردهی شده است ارور میدهد .

ولی آدرسهای زیر معتبر هستند :

http://localhost:30847/Home/Learn1030?firstNumber=15&secondNumber=20
http://localhost:30847/Home/Learn1030?secondNumber=20&firstNumber=15

نکته : ترتیب مقدار دادن به پارامترها اهمیت ندارد (روش دوم)

اکشن بعدی Learn1040 است که بصورت زیر تعریف شده است : 

    public void Learn1040(int id, int number)
        {
            // Do Something…
        }

اگر به روشهای زیر اکشن فوق را فراخوانی کنیم با error روبرو می شویم :

http://localhost:30847/Home/Learn1040
http://localhost:30847/Home/Learn1040/15

و روشهای زیر درست است :

http://localhost:30847/Home/Learn1040/15?number=20    // شیک تر
http://localhost:30847/Home/Learn1040?id=15&number=20
http://localhost:30847/Home/Learn1040?number=20&id=15

روش اول شیکتر است ! با توجه به اینکه نام یکی از پارامترها id می باشد میتوان آنرا ننوشت و فقط نام پارامتر بعدی را قید کرد .

اکشن Learn1050 بصورت زیر است :

   public void Learn1050(int? number)
        {
            // Do Something…
        }

پارامتر عددی این اکشن بصورت Nullable تعریف شده است (?int)  پس می توانیم به آن عددی نسبت دهیم میتوانیم ندهیم . تمام روشهای زیر درست می باشند :

http://localhost:30847/Home/Learn1050
http://localhost:30847/Home/Learn1050/15
http://localhost:30847/Home/Learn1050?number=15

اکشن Learn1060 پارامتر رشته ای می گیرد :​

   public void Learn1060(string name)
        {
            // Do Something…
        }

روشهای آدرس دهی زیر صحیح می باشند :

http://localhost:30847/Home/Learn1060
http://localhost:30847/Home/Learn1060/Something
http://localhost:30847/Home/Learn1060?name=Something

چون رشته می تواند null باشد (Reference Type است) به مشکلی برخورد نمیکنیم .

در اکشن بعدی (Learn1070) پارامتر رشته ای بنام id تعریف شده است . پس می توان نام آنرا در آدرس ننوشت :

   public void Learn1070(string id)
        {
            // Do Something…
        }

بنابراین روشهای زیر درست است :

http://localhost:30847/Home/Learn1070
http://localhost:30847/Home/Learn1070/Something 
http://localhost:30847/Home/Learn1070?id=Something

مشخص است که روش دوم شیک تر است ! laugh

اکشن آخر هم نکته جالبی دارد . اگر به پارامتر name مقداری اختصاص داده نشود مقدار پیش فرض مثلا * را در name میریزد :

   public void Learn1080(string name = "*")
        {
            // Do Something…
        }

روشهای زیر همگی درست می باشند و error نمیدهند :

http://localhost:30847/Home/Learn1080    -> name = "*"
http://localhost:30847/Home/Learn1080/Something   -> name = "*"
http://localhost:30847/Home/Learn1080?name=Something   -> name = "Something"

در روش اول چون مقداری داده نشده name مقدار پیش فرض * را میگیرد .

در روش دوم چون نام پارامتر ذکر نشده ، دنبال id میگردد و چون نام پارامتر id نمی باشد name مجددا * میشود

در روش سوم که مقدار name صراحتا تعیین شده است .

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

در مقاله بعدی انواع توابع واقع در کنترولر را خواهیم دید . همراهمان باشید …blush


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



دیدگاه ها :