تغییرات Razor در ASP.NET MVC 4

این مطلب برداشت آزادی از مطلب درج شده در وبلاگ Alexander Beletsky می باشد. ساختار دستورات Razor در ASP.NET MVC4 تغییرات کوچکی را بهمراه داشته است. هر چند از آنها نمی توان به عنوان تغییرات انقلابی یاد کرد اما مطمئنا می توانند پدید آمدن حس رضایت در بسیاری از برنامه نویسان را موجب شوند. مطمئنا بسیاری از برنامه نویسان از نوشتن کدهای کمتر برای حصول نتیجه ای یکسان خوشحال خواهند شد.
عدم احتیاج به Url.Content@
در گذشته برای ارجاع به فایل های CSS و JavaScript باید از Url.Content@ استفاده می کردید. ازجائیکه این کد در توسعه بارها مورد استفاده قرار می گرفت، تیم توسعه دهنده تصمیم به انتقال آن به سطح Engine گرفت. بنابراین از این پس به جای:
<script src="@Url.Content("~/Scripts/Controls.js")">
</script>
می توانید براحتی بنویسید:
<script src="~/Scripts/Controls.js"> </script>
اگر Razor با “~/ ” در کد مواجه شود، حاصل مشابهی با Url.Content@ را در خروجی تولید می نماید. برای این منظور تنها نیاز به تغییراتی در فایل های View دارید.
شرط ها
شرط های قرار گرفته در Attribute ها بسیار آشفته به نظر می رسیدند. آیا شما هم تابحال کدی مانند عبارت زیر را تولید کرده اید؟
<div @{if (myClass != null)
{ <text>class="@myClass"</text> } }>Content</div>
اگر با مورد مشابهی برخورد کرده بودید مطمئنا انجام آن چندان خوشایند نبود. بسیاری استفاده از HTML Helper ها ساده را به جای آن ترجیح می دادند. در ساختار جدید Razor مساله کمی ساده تر شده است، اکنون می توانید براحتی عبارت زیر را به جای عبارت فوق بنویسید:
<div class="@myClass">Content</div>
اگر مقدار myClass@ برابر null باشد، ویژگی Class به خروجی ارسال نخواهد شد. مورد توضیح داده شده فوق در مورد Boolean ها نیز به همین منوال است. در واقع شرط ها تنها از نوع های nullable پشتیبانی نمی نمایند بلکه Boolean ها نیز شامل همین تغییرات جدید می شوند. بنابراین به عنوان مثال در صورتی که کدی مانند عبارت زیر داشته باشیم:
<input checked="@ViewBag.Checked" type="checkbox"/>
اگر ViewBag.Checked@ برابر null و یا false باشد، به صورت زیر Render خواهد شد:
<input type="checkbox"/>
و در غیراینصورت اگر ViewBag.Checked@ برابر true باشد، به شکل زیر Render خواهد شد:
<input checked="checked" type="checkbox"/>



