Es gibt ein gemeinsames Problem, stark typisierte HTML-Helfer zu schreiben. Das Problem besteht darin, wie das Name/Wert-Paar der Eigenschaft abgerufen wird. Angenommen, wir folgende HTML-Hilfs Erklärung haben:expression.Compile() vs ModelMetadata.FromLambdaExpression
public static string DatePickerFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, DateTime?>> expression)
gibt es mehrere Lösungen, die ich gefunden: 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. Mitglied bekommen Name nur mit Member
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;
}
Alle von ihnen haben verschiedene Umsetzung von der ersten Seite (verwendet Reflektor zu untersuchen), aber ich habe nicht tief in.
Ich habe mit so vielen Möglichkeiten, Problem zu lösen und möchte gerne wissen, welche Lösung für verschiedene Situationen besser ist und WARUM?
Ich werde für jede Hilfe
Danke. Wissen Sie, gibt es einen Unterschied in verschiedenen Ansätzen für "Wert" -Variablen? Vielleicht einige Leistungsvorteile für den einen oder anderen Fall? – Cheburek