Как написать собственный @ Html.ControlFor (o => o.Property)? - PullRequest
3 голосов
/ 15 июля 2011

Я хочу создать собственный метод, чтобы иметь возможность вызывать его как

@Html.PaginationFor(o => o.List)

Я начал смотреть на рефлектор, но я точно не знаю, что он там делает.Я попытался:

public static MvcHtmlString PaginationFor<TModel, TProperty>(this Html<TModel> html,
    Expression<Func<TModel, TProperty>> expression)
{
    var propertyValue = ????????
    return html.Partial("View", propertyValue);
}

Как извлечь значение свойства из выражения для передачи в качестве модели частичного представления?

Ответы [ 2 ]

3 голосов
/ 15 июля 2011
public static MvcHtmlString PaginationFor<TModel, TProperty>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TProperty>> expression
)
{
    TModel model = html.ViewData.Model;
    var metaData = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
    var propertyValue = metaData.Model; // This will be of type TProperty
    return html.Partial("View", propertyValue);
}
0 голосов
/ 15 июля 2011
public static MvcHtmlString PaginationFor<TModel, TProperty>(this HtmlHelper<TModel> html,
    Expression<Func<TModel, TProperty>> expression) {

    var func = expression.Compile();

    var propertyValue = func(html.ViewData.Model);
    return html.Partial("View", propertyValue);
}
...