PDA

View Full Version : سوال: Custom Html Helper with LINQ Expression



morika
چهارشنبه 19 شهریور 1393, 14:22 عصر
سلام
چجوی میشه یه helper مثل helper های خود mvc ساخت که با linq expression کار کنن؟
مثل:
@Html.DisplayFor(modelItem => item.ShortContent)
البته هرجایی که گشتم این کد رو دادن:
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression){
}
ولی کد دوتا پارامتر لازم داره و مثل displayfor فقط با linq کار نمی کنه

A.S.Roma
پنج شنبه 20 شهریور 1393, 20:56 عصر
در مورد extension method و expression Tree تحقیق کنید.
جواب سوال اصلی رو خودتون نوشتید.

hakim22
شنبه 22 شهریور 1393, 10:02 صبح
منظور شما از دو تا پارامتر مشخص نیست .

قسمت اول


this HtmlHelper<TModel> html


یک پارامتر ورودی نیست. Helper ها در حقیقت Extension Method هستند. برای تعریف یک Extension Method شما باید مشخص کنید قرار است کدام کلاس را می خواهید Extend کنید. هر وقت شما قصد داشته باشید متد جدیدی به کلاسی که قبلا تعریف شده اضافه کنید بدون اینکه مستقیما آن را تغییر دهید از این روش استفاده می کنید. (ممکن است شما به کلاس اصلی دسترسی نداشته باشید یا ...)

مثلا با استفاده از این روش میتوانید یک متد جدید به کلاس DateTime اضافه کنید که مستقیما تاریخ میلادی را به شمسی تبدیل کند. این متد می بایست از نوع استاتیک باشد و به روش بالا تعریف شود.

سورس کد MVC برای ساختن DisplayFor :


public static MvcHtmlString DisplayFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
return TemplateHelpers.TemplateFor(html, expression, null /* templateName */, null /* htmlFieldName */, DataBoundControlMode.ReadOnly, null /* additionalViewData */);
}