Синтаксис MVC Razor: @, затем HTML - PullRequest
1 голос
/ 09 февраля 2012

Я наткнулся на этот код сегодня и не очень его понимаю. Может кто-нибудь сказать мне, что это значит и как это интерпретировать? Я упростил его, но в основном это символ @, за которым следует некоторый HTML.

Звонок:

@Html.Tmpl(@<p>text to display</p>)

Функция:

public static HelperResult Tmpl<TModel>( this HtmlHelper<TModel> html, Func<HtmlHelper<TModel>, HelperResult> template )
{
    return new HelperResult( writer => template( html ).WriteTo( writer ) );
}

Пожалуйста, просветите меня. Спасибо.

1 Ответ

2 голосов
/ 09 февраля 2012

Это пример того, что известно как шаблонный делегат бритвы.Проще говоря, это тип помощника HTML, который принимает блок кода шаблона Razor, который можно использовать для составления результата сложной операции.

Простым вариантом использования может быть метод Html.List(data, template), который принимает список записей и шаблон для каждой строки данных.Разметка шаблона - это делегат, который может быть вызван и передан модели в рамках логики помощника.

public static HelperResult List<T>(this IEnumerable<T> items, 
  Func<T, HelperResult> template) {
    return new HelperResult(writer => {
        foreach (var item in items) {
            template(item).WriteTo(writer);
        }
    });
}

Фил Хаакед подробно расскажет здесь: http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx.

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