Çok yazılan Html yardımcılarının yazılmasıyla ilgili yaygın bir sorun var. Sorun, özellik adı/değer çiftinin nasıl alınacağıdır. Bulduğumexpression.Compile() vs ModelMetadata.FromLambdaExpression
public static string DatePickerFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, DateTime?>> expression)
vardır birkaç çözümleri: 1.
var value = expression.Compile()(helper.ViewData.Model);
string name = ExpressionHelper.GetExpressionText(expression);
string fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
2.
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
Object value = metadata.Model;
String name = metadata.PropertyName;
3. sadece MemberExpression kullanarak üye adı alınırken biz Html yardımcı ilanı sonrasında gelmiş varsayalım
string GetPropertyName<T>(Expression<Func<T>> property)
{
var propertyInfo = (property.Body as MemberExpression).Member as PropertyInfo;
if (propertyInfo == null)
{
throw new ArgumentException("The lambda expression 'property' should point to a valid Property");
}
return propertyInfo.Name;
}
Bunların hepsi, ilk bakıştan farklı bir uygulamaya sahiptir (araştırmak için Reflektör kullanılır) ama ben derinden kazmadım.
Sorunu çözmenin pek çok yolu ile uğraştım ve hangi durumun farklı durumlar için daha iyi olduğunu bilmek isterim NEDEN?
Ben Bu çözümler, iki farklı bağlamlarda kullanılan herhangi bir yardım
Teşekkür ederiz. "Değer" değişkenleri için farklı yaklaşımlarda bir fark olduğunu biliyor musunuz? Belki bazı durumlar için bazı performans avantajları? – Cheburek