#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 при его обнаружении. Объединение в цепочку достигается просто путем возврата текущего экземпляра в ваших методах после изменения состояния объекта.