próbuję pisać mojego pierwszego klienta Html Helper metodę rozszerzenia po formacieRóżnice między metodami HtmlHelper dostępu do właściwości z lambda wyrażenia
public static MvcHtmlString<TModel, TProperty>
MyHelperFor(this HtmlHelper<TModel> helper,
Expression<Func<TModel, TProperty>> expression)
I nie wydają się być kilka różnych sposobów, aby uzyskać dostęp do nazwy właściwości i wartości z 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);
i
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var propertyName = metadata.PropertyName;
var propertyValue = metadata.Model;
i także
TModel model = (TModel)helper.ViewContext.ViewData.ModelMetadata.Model;
TProperty value = expression.Compile().Invoke(model);
Czy ktoś może wyjaśnić różnicę między tymi metodami? Czy są sytuacje, w których jeden jest lepszy od innych?
Jeśli skontrolować [kod źródłowy MVC] (http://aspnetwebstack.codeplex.com/SourceControl/latest) dla 'System.Web.Mvc.Html 'zobaczysz, że wszyscy pomocnicy używają drugiej odmiany -' ModelMetadata.FromLambdaExpression (expression, html.ViewData); 'tak zakładam, że to jest lepsze podejście –