Методы расширения гнезда для MVC HtmlHelpers

Я хочу вложить набор методов расширения для моих контроллеров MVC, я хочу иметь возможность вызывать по следующей схеме

@Html.NestedName().CustomLabelFor(m => m.Field)

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

В настоящее время у меня есть класс высшего уровня, как показано ниже

    public static class BootstrapHtmlHelper
{
    public static BootStrap Bootstrap(this HtmlHelper html)
    {
        return new BootStrap(html);
    }
}

Вложенный в класс Bootstrap у меня есть следующий метод

        public static MvcHtmlString CustomLabelFor <TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, string placeholder)
    {
        StringBuilder sb = new StringBuilder();
        return new MvcHtmlString(sb.ToString());
    }

Очевидно, что это больше не может быть статичным, но как мне заменить то, что было бы "этим", чтобы мой метод оставался функцией? Очевидно, что TModel и TProperty по-прежнему требуются, но я не уверен, как их использовать?

1 ответ

Решение

Ты почти там. Давайте разберем это на две части:

  1. Вам нужен статический класс для размещения вашего метода расширения (BootstrapHtmlHelper).
  2. Вам нужен нестатический класс для размещения вашего метода экземпляра (BootStrap)

Итак, вам просто нужно изменить ваш второй метод на:

public MvcHtmlString CustomLabelFor<TProperty>(Expression<Func<TModel, TProperty>> expression, string placeholder)

Также вам нужно будет изменить BootStrap сохранить параметр типа модели, переданный в методе расширения. Так объявляю BootStrap как BootStrap<TModel> и передать это при создании нового BootStrap (т.е. new BootStrap<TModel>(html)).

Теперь вы сможете вызывать его по своему желанию:

@Html.Bootstrap().CustomLabelFor(m => m.Field)

(Ты имел @Html.NestedName() но очевидно NestedName должно быть Bootstrap, так как это имя вашего метода расширения, верно?)

Другие вопросы по тегам