Как написать на C# свой HtmlHelpers?

166
21 июня 2018, 13:00

Хочу сделать свои HtmlHelper, но так что бы первый екстеншен, после Html, был мой, а после этого уже HtmlHelper, как в Kendo.

Пример:
     @(Html.MyExtensions().TabStrip()
        .Name("tabs")
        .Collapse(true)
        )

Создал для этого клас HTMLHelperExtension и сделал метод расширения на клас HtmlHelper где мето возвращает клас

    public static class HTMLHelperExtension
    {
         public static TabsExtensions MyExtensions(this HtmlHelper @this)
         {
            return new TabsExtensions();
         }
    }
 public class TabsExtensions
    {
        public TabsExtensions TabStrips()
        {
            return new TabsExtensions();
        }
    }

После этого сделал класс TabStrip где методы Name(), Collapsible() росширяют клас TabsExtensions

 public static class TabStrip
{
    public static MvcHtmlString Name(this TabsExtensions @this, string name)
    {
        .................................. 
    }
    public static MvcHtmlString Collapsible(this TabsExtensions @this, bool collapsible)
    {
        ..................................
    }
}

Проблема вот в чем, я могу использовать только один метод расширения или Name или Collapsible.

@(Html.MyExtensions().TabStrip()
        .Name("tabs")
        .Collapse(true) <-----этот метод уже не работает
        )
Answer 1

Из метода Name вы возвращаете MvcHtmlString, а метод Collapse принимает на вход TabsExtensions. Возвращайте всегда TabsExtensions из ваших методов расширений и тогда получится вызывать их цепочкой. И добавьте один метод, который из сконфигурированных TabExtensions генерировать строку.

 public static class TabStrip
 {
     public static TabsExtensions Name(this TabsExtensions @this, string name)
     {
           // заменен возвращаемый тип
        .................................. 
     }
    public static TabsExtensions Collapse(this TabsExtensions @this, bool collapsible)
     {
           // заменен возвращаемый тип
         ..................................
     }
     public static MvcHtmlString Render(this TabsExtensions @this)
     {
             return @this.RenderString(); -- здесь может быть любой другой код, который генерирует строку, это приведён как пример
     }
 }
READ ALSO
C# Кодировка Uri в WebRequest

C# Кодировка Uri в WebRequest

url содержит кириллицу, изначально закодированную в HEX - %20%2B%A0 и тдТак вот если сделать WebRequest

157
EntityValidationErrors при добавлении

EntityValidationErrors при добавлении

Была взята за основу готовая база данных и по ней создан контекст и модели таблицСвязал таблицы в конструкторе таблиц таким образом: countrylanguage...

236
Сохранить график Chart C# в PDF

Сохранить график Chart C# в PDF

Как сохранить график, построенный с помощью Chart в PDF формате?

157
Выборка - Linq, Entity Framework (Many-to-many)

Выборка - Linq, Entity Framework (Many-to-many)

Имеется две таблицы "CarsSet" и "MotorSet" со связью многие ко многимТретья (связывающая таблица в EF не видна)

178