بدون شک دوستانی که با تکنولوژی محبوب ASP.NET MVC5 کار کرده اند این نکته را میدانند که اگر فایلهای T4 که وظیفه Scaffolding را به عهده دارند به پروژه خود اضافه کنند میتوانند نحوه تولید خودکار Controllerها و Viewهای متناظر را سفارشی کنند. مثلا میتوان این فایلها را طوری طراحی کرد که Controller و Viewهای تولیدی به طور اتوماتیک چند زبانه و یا Responsive تولید شوند (این موضوعات بحث اصلی مقاله نیستند) و اما بحث اصلی را با یک مثال آغاز میکنیم :
فرض کنید در دیتابیس خود یک Table دارید که قرار است اطلاعات یک Slider را در خود نگه دارد. این Table دارای یک فیلد از نوع nvarchar برای ذخیره آدرس تصویر ارسالی توسط کاربر است.
در حالت عادی اگر از روی مدل این Table اقدام به تولید خودکار Controller و View متناظر کنید، یک editor (تکست باکس) برای دریافت آدرس تصویر تولید خواهد شد که برنامه نویس یا طراح باید به طور دستی آن را (به طور مثال) با Kendo uploader جایگزین نماید. ما میخواهیم برای فیلدهایی که قرار است آدرس تصویر را در خود نگه دارد به طور اتوماتیک از Kendo uploader استفاده شود. راه حل چیست؟
بسیار ساده است. ابتدا باید در نظر داشت که هنگام طراحی Table در دیتا بیس فیلد مورد نظر را به این شکل نامگذاری کنید : ExampleIMGURL (نحوه نام گذاری دلخواه است) مقصود آن است که نام هر فیلدی که قرار است آدرس یک تصویر را در خود نگه دارد باید حاوی کلمه (IMGURL) باشد. مجددا ذکر میشود که نحوه نامگذاری اختیاری است. سپس فایل Create.t4 را باز کنید و کد :
@Html.EditorFor(model => model.<#= property.PropertyName #>)
را با کد زیر جایگزین کنید :
<#
if (GetAssociationName(property).Contains ("IMGURL")
{
#>
@Html.Kendo().Upload().Name("<#= property.PropertyName #>")
<#
}
else
{
#>
@Html.EditorFor(model => model.<#= property.PropertyName #>)
<#
}
#>
کد بالا چک میکند اگر نام فیلد مد نظر حاوی " IMGURL " باشد یک کندو آپلودر تولید کرده در غیر این صورت یک ادیتور ساده تولید میکند. البته این فقط یک مثال است و بدون شک دامنه استفاده از این تکنیک وسیعتر است.
اگر این مطلب مفید واقع شد با در نظر گرفتن نظرات ارسالی به تکنیکهای آتی اشاره خواهد شد.