Sto cercando di scrivere il mio primo cliente metodo di estensione Html Helper seguendo il formatodifferenza tra i metodi HtmlHelper per l'accesso a oggetti di espressione lambda
public static MvcHtmlString<TModel, TProperty>
MyHelperFor(this HtmlHelper<TModel> helper,
Expression<Func<TModel, TProperty>> expression)
E sembra che ci siano diversi modi per accedere al nome della proprietà e il valore dal expression
var body = expression.Body as MemberExpression;
var propertyName = body.Member.Name;
var propertyInfo = typeof(TModel).getProperty(propertyName)
var propertyValue = propertyInfo.GetValue(helper.ViewData.Model);
e
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var propertyName = metadata.PropertyName;
var propertyValue = metadata.Model;
e anche
TModel model = (TModel)helper.ViewContext.ViewData.ModelMetadata.Model;
TProperty value = expression.Compile().Invoke(model);
Qualcuno può spiegare la differenza tra questi metodi? Ci sono situazioni in cui uno è superiore agli altri?
Se si controlla il [codice sorgente MVC] (http://aspnetwebstack.codeplex.com/SourceControl/latest) per 'System.Web.Mvc.Html ', vedrai che tutti gli helper usano la seconda variante -' ModelMetadata.FromLambdaExpression (expression, html.ViewData); quindi, presumo che sia l'approccio migliore –