Как создать пользовательский html-помощник панели инструментов фильтра в mvc3

#asp.net #asp.net-mvc-3 #html-helper #lambda

#asp.net #asp.net-mvc-3 #html-помощник #лямбда

Вопрос:

Я уже довольно долго бьюсь над этим. Мне нужно создать пользовательский html-помощник mvc3 для упрощения управления фильтрами и панелью инструментов.

Весь этот помощник должен выглядеть примерно так, как показано ниже, или что-то подобное. Что я хочу сделать, так это создать помощник, в котором я мог бы указывать кнопки панели инструментов и поля фильтра, и он генерировал бы для меня панель инструментов и форму фильтра.

Я просто не могу в этом разобраться, потому что я совсем новичок в asp.net mvc

 @Html.Toolbar(x => {
   x.AddFilterButton();
   x.AddButton("Naujas");
   x.AddDropDownList();
   },
   @<text>
   @Html.EditorFor(Model.ListFilter.Name)
   Filter
   ResetFilter
   </text>,
   filterVisible: false)
  

Как я мог бы этого добиться? Любая помощь была бы высоко оценена. Большое спасибо.

Комментарии:

1. Я хотел бы вам помочь. Но в вашем вопросе смешано много разных вещей, поэтому мне нужен час, чтобы ответить 😉 Для вашей части lambda (x => { x.Add(…)) вам следует ознакомиться с деревьями выражений. Остальное освоить несложно. Я предлагаю вам загрузить исходный код mvc3, MvcContrib или telerik. У них это было в их сетках и других элементах управления.

Ответ №1:

Что-то вроде этого:

 public static class ToolbarExtensions {
    public static Toolbar Toolbar<T>(this HtmlHelper<T> html) {
        return new Toolbar();
    }
}

public class Toolbar : IHtmlString {
    public string ToHtmlString() { /* build your HTML off the state here */ }

    public Toolbar AddButton(string label) {
        /* build up state here */

        return this;
    }
}
  

Синтаксис в этом случае был бы немного другим, вместо лямбда-выражения, выглядел бы следующим образом:

 @Html.Toolbar().AddButton("Button 1").AddButton("Button 2")
  

Но вы могли бы легко изменить его, чтобы использовать объект цепочки в lambda вместо Toolbar вызова метода.

IHtmlString Интерфейс сообщает ViewEngine выводить объект в виде необработанного HTML при его обнаружении. Объединение в цепочку достигается просто путем возврата текущего экземпляра в ваших методах после изменения состояния объекта.