در این مقاله قصد داریم یکی از ویژگیهای جدید نسخه 3م از ASP.NET MVC را معرفی کنیم، ویژگیای که میتوان گفت یکی از بهترین و کاربردیترینها برای برنامهنویسان ASP.NET است. این ویژگی Razor Syntax نام دارد. این ویژگی علاوه بر پایین آوردن کدهای نوشته شده برای یک صفحه، یک کد تمیزتر نسبت به ASP.NET Syntax ارائه میدهد. به آن بخشی که در رندر کردن صفحات استفاده میشود View Engine میگویند. Razor یک View Engine جدید برای رندر کردن صفحات سمت سرور در ASP.NET است.
این گرامر به شما اجازه میدهد هم کد HTML برای تولید قالب صفحه و هم کد سمت سرور را به صورت تودرتو در کنار هم داشته باشید! یعنی نیازی نیست همیشه مانند ASP.NET View Engine برای هر قطعه کد سمت سرور از
«% %» استفاده کنید. یک نمونه کد از این گرامر را میبینیم و در مورد آن بیشتر توضیح میدهیم.«ul»
@foreach (BlogModels.Post post in Model) {
«li»
«h2»@post.Title.«/h2»
«br /»
«h3»
«ul»
@foreach (BlogModels.Comment comment in post.Comments) {
«li»@comment.Text.«/li»
}
«/ul»
«/h3»
«/li»
}
«/ul»
همان طور که در کد بالا مشخص است میتوانید به راحتی کد سمت سرور و کد HTML مورد نظر را در یک قطعه کد بنویسید و خود View Engine عمل تشخیص را انجام میدهد. نکته قابل توجه در کد بالا خط 4م است بعد از post.Title@ یک نقطه گذاشته شده، خود View Engine تشخیص میدهد که این نقطه جزئی از کد سمت سرور است یا قرار است به صورت یک متن در html تولید شده وجود داشته باشد. در این View Engine دیگر خبری از هدرهای صفحات asp.net نیست! دیگر برای استفاده از مسترپیج نیازی نیست که یک سری ContentPlaceHolder قرار دهید یا در خود صفحه مسترپیج صراحتا اعلام کنید که محتوای صفحه که قرار است تکرار شود چی هست و محتوای اختصاصی در کجا قرار دارد. برای این کار کافی است تابع RenderBody را فراخوانی کنید. برای مثال دو قطعه کد زیر را مقایسه کنید:
«asp:Content ID=Content2 ContentPlaceHolderID=»MainContent runat»=»server»»
«/asp:Content»
«div id=main»
@RenderBody()
«div id=footer»
«/div»
«/div»
اولی بر مبنای ASP.NET View Engine است و دومی با Razor View Engine، خب تفاوتها کاملا مشخص هستند، مزیت اصلی Razor View Engine تولید کد خواناتر و تمیزتر است و هر کسی با یک مقدار آشنایی با گرامر آن میتواند یک صفحه View درست کند. بسیار خب قدری ویژگیهای گرامری Razor را بررسی کنیم.
قطعه کد
در صفحات ASP.NET اگر میخواستید چند خط کد به زبانهای C# یا VB بنویسید باید آنها را در تگ
«% %» قرار میدادید، اما در Razor آنها را در {}@ قرار میدهید. برای نمایش یک متغیر که در سمت سروراست در ASP.NET باید آن را در «%: %» قرار دهید، برای این که خودش عمل تبدیل به داده خام HTML را انجام دهد از «%= %» استفاده میکنید، اما در Razor باید از «variable»@ استفاده کنید جای «variable» هر چیزی میتوانید قرار دهید مثلا DateTime.Now یا متغییر xی که در کد سمت سرور تعریف کردید (x@) در Razor به صورت پیش فرض مقدار کد شده html نمایش داده خواهد شد و اگر بخواهیم به صورت خام نمایش داده شود باید از متدهای کمکی استفاده کنیم مثلا Html.Raw.حلقههای تکرار
در حلقههای تکرار نیاز است که یک مقدار کد html به صورت تکراری در صفحه نمایش داده شود. مثلا فهرست آیتمهای موجود در یک سبد خرید در ASP.NET به صورت زیر است.
«% foreach(var item in items) {%»
«span»«%: item.Prop %»«/span»
همان طور که مشاهده میکنید هر جایی که نیاز باشد کد سمت سرور باشد باید از تگهای
«% %» استفاده شود!در Razor به صورت زیر است:
@foreach(var item in items) {
«span»@item.Prop«/span»
}
میبینید دیگر نیاز نیست مدام از تگهای
«% %» استفاده کنید!دستورات کنترلی
این دستورات هم مثل حلقه هستند، مثلا:
ASP.Net:
«% if (foo) { %»
Plain Text
«% } %»
Razor:
@if (foo) {
«text»Plain Text«/text»
}
کامنتها:
ASP.NET
«%--
This is a server side
multiline comment
--%»
Razor:
@*
This is a server side
multiline comment
*@
در این مقاله سعی شد مقدمهای در مورد Razor View Engine و Razor Syntax توضیح داده شود، اما برای مطالعه بیشتر آن میتوانید از لینکهای زیر استفاده کنید:
http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx
http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
امیربهاءالدین سبطالشیخ