در نسخه 3 ي ASP.NET MVC موتور نمايش(view-engine) جديدي بنام Razor اضافه شده ميزان كد نويسي View ها رو كم كرده.
يكي از قابليت هاي جالب اون ساختن متدهاي كمكي به صورت اعلانيه(Declarative) كه اين امكان رو ميده در همون فايل View مون بتونيم متدهاي كمكي بسازيم كه ازش در سرتاسر اون View استفاده كنيم.
براي مثال فرض كنيد جدولي داريم كه ستوني بنام قيمت(Price) داره حالا ميخواهيم اگه اون ستون كمتر از يك عددي بود اون ستون قرمز بشه و…
براي نوشتن اين مثال از سري آموزشي MVC Music Store استفاده ميكنم.براي همين قسمت Model و Controllers رو نمينويسم.
براي نوشتن متد كمكي از Helper@ استفاده ميكنم و بقيه مراحل دقيقا مثل نوشتن يك متد عاديه البته تنها فرقش با متد اينه كه بدنه ي متد فقط شامل كدهاي C# نيست.
@helper PriceHighlighter(decimal inputPrice, decimal treshold)
{
if (inputPrice > treshold)
{
<span style="background-color: red">@inputPrice</span>
}
else
{
@inputPrice
}
}
همنطور كه گفتم فرق خاصي با متدهاي عادي نداره.ورودي رو با مقدار مورد نظرمون مقايسه ميكنيم و اگه بيشتر از اون بود يك تگ SPAN با رنگ قرمز و وروديمون برمي گردونيم(من زياد HTML م خوب نيست اگه بجز SPAN تگ ديگه ي ميشه استفاده كرد بگيد).
</td> @PriceHighlight(item.Price, 9) </td>
نحوه استفاده هم مثل فراخواني يك متد عاديه.
تا اينجا بسيار خوب ولي چندتا مشكل
- با زياد شدن تعداد متد ها View ي ما پر ميشه از اين متدها كه خوب نيست
- امكان استفاده از اين متدها محدود به همون View ي هست كه متد داخلش نوشته شده
براي رفع اين مشكل ها بايد تعريف كدهاي كمكيمون رو تو سطح برنامه بنويسم به نوعي Scope كدها رو بيشتر كنيم تا در تمام View ها قابل استفاده باشه.
براي اينكار كافيه يك فولدر بنام App_Code داخل پروژه ايجاد كنيم و داخل اون يك MVC 3 View Page (Razor) (يا هر آيتمي با پسوند CSHTML) اضافه كنيم(هرچي داخلش هست رو پاك كنيد) و متدهاي كمكي مورد نظرمون رو داخل اون اضافه كنيم.
نحوه استفاده هم مثل فراخواني متدهاي استاتيك يك كلاس ميمونه مثلا RazorHelpers.PriceHighlighter و…
نكته:با استفاده از اين روش نميتونيم از متدهاي كمكي خود MVC كه از طريق Html به اونا دسترسي داريم استفاده كنيم.البته براي رفع اين مشكل روشي اينجا معرفي شده كه ميتونيد استفاده كنيد.

