متد های child action در ASP.NET MVC

تمامی اکشن متدهای داخل Controller ها ، قابل فراخوانی از طریق نوار آدرس مرورگر (به صورت مستقیم) یا داخل View ها هستند . در ASP.NET MVC  می توان متد هایی تعریف کرد که دسترسی به آنها از طریق نوار آدرس مرورگر امکان پذیر نباشد که به این متد ها Child action می گویند . نوع child action دقیقا مانند سایز action method ها می باشد با این تفاوت که یک property با نام ChildActionOnly به متد اضافه می شود .
خاصیت ChildActionOnly مشخص می کند که دسترسی به متد باید از طریق 
child request  باشد .

child request  چیست :

child request یعنی نمی توان به یک متد به صورت مستقیم از طریق url دسترسی داشت . برای دسترسی یه متد هایی که با خصوصیت childActionOnly تعریف شده اند باید در داخل view ها اقدام به دسترسی نمود.
به صورت زیر یک متد chid action تعریف می شود :

[ChildActionOnly]
public ActionResult Index()
{
    return View();
}

در صورتی که قصد نمایش child action را از طریق نوار آدرس (به صورت مستقیم) داشته باشید با خطای زیر رو به رو خواهید شد :

Accessing-ChildAction-View-in-Browser

چه موقع باید از child action ها استفاده کرد :
- اگر تصمیم دارید که یک View توسط کاربران به طور مستقیم قابل دسترسی نباشد آن را به صورت Child Action تعریف کنید .
- Child action ها از بکار بردن کدهای تکرار جلوگیری می کنند و باعث کاهش حجم کدنویسی خواهند شد . تقریبا شباهت آنها از نظر کارکرد شبیه partial View ها هستند که می توانید در چندین جای مختلف آن ها را به کار ببرید .

نحوه استفاده :
همانطور گفتیم برای فراخوانی child action  های نمی توانید از طریق url اقدام به نمایش آنها کنید ، برای دسترسی به آنها در داخل view مورد نظر از طریق متد html.action قابل دسترسی می باشند . تکه کد فوق در داخل یک View  اکشنی به اسم childactionName را اجرا خواهد کرد :

@Html.Action("childactionName")

 با یک مثال بهتر متوجه کارکرد این نوع متدها خواهید شد . فرض کنید پروژه ای داریم که در صفحه های مختلف آن نیاز داریم  تا اخبار را با گروه های(category) مشخص  نمایش دهیم برای این کار می توان یک child action  نوشت و یک پارامتر برای آن تعیین کرد به عنوان category و در هر Viewیی که نیاز به نمایش اخبار داشته باشیم کافیست متد child action را با category مشخص فراخونی کنیم ، کدهای زیر نمایش دهنده این موضوع هستند :

[ChildActionOnly]
public ActionResult GetNews(string category)
{
    var newsProvider = new NewsProvider();
    var news = newsProvider.GetNews(category);
    return View(news);
}

 
حال در هر  view یی که قصد داشته باشیم  اخبار را نمایش دهیم به صورت زیر عمل خواهیم کرد :

@Html.Action("GetNews", "Home", new { category = "Sports"})

 اگر کنترلر View جاری با کنترلری که متد action child  در آن قرار دارد ، یکی می باشد نیازی به نوشتن نام کنترلر نمی باشد اگر هم نوشته شود مشکلی ندارد ، در این حالت به صورت زیر می باشد:

@Html.Action("GetNews",  new { category = "Sports"})

 همانطور که در کدهای بالا مشاهده کردید ، متدهای child action از تکثیر یک یا چند قطعه کد در جاهای مختلف پروژه جلوگیری می کنند .


توسط : عثمان رحیمی  1113 روز قبل ، چهارشنبه 14 آبان 1393 ساعت 00:56  2  2308

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط

نظرات خوانندگان

کاربر مهمان (سامرند سلیمانی)  در تاریخ : 1113 روز قبل ، چهارشنبه 14 آبان 1393 ساعت 00:00

خیلی جالب بود استاد خیلی استفاده کردیم بازم از این مقالات مفید بزارید

کاربر مهمان (...)  در تاریخ : 8 ماه قبل ، شنبه 22 اسفند 1394 ساعت 00:00

کارتون خوبه لطفا در مورد ViewModel هم مطلب بزارید