Как получить имя для ввода, например hv для hvml от mvc - PullRequest
4 голосов
/ 13 июля 2011

Я хочу написать метод расширения HtmlHelper, аналогичный HiddenFor.Разница в том, что я хочу контролировать, что входит в атрибут value, а также использовать дополнительный атрибут.Я подумал, что могу просто посмотреть на исходный код MVC, как на его открытый исходный код и все такое.Но, если я не слеп, кажется, что строго типизированные вспомогательные методы, такие как HiddenFor, TextBoxFor и т. Д., Не включены в исходный код.

В сигнатуре метода используется выражение> выражение.

Учитывая выражение, как я могу получить то же значение атрибута имени, что и HiddenFor?

1 Ответ

4 голосов
/ 13 июля 2011

Но, если я не слепой, похоже, что сильно типизированный помощник такие методы, как HiddenFor, TextBoxFor и т. д., не включены в исходный код

Все включено в исходный код, просто скачайте и посмотрите на InputExtensions.cs.

Итак, чтобы получить имя:

public static MvcHtmlString FooBarFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, TProperty>> expression
) 
{
    var name = ExpressionHelper.GetExpressionText(expression);
    var fullHtmlFieldName = htmlHelper
        .ViewContext
        .ViewData
        .TemplateInfo
        .GetFullHtmlFieldName(name);

    // do something with the name
    ...
}

Метаданные ModelMetadata = ModelMetadata.FromLambdaExpression (выражение, htmlHelper.ViewData)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...