Продолжение Criterion, скорее финальная часть, если первый был написан ради шутки,
то в этом проекте уже заложена реализация для вставки в промышленный код.
Исходим из задач:
Возможность комбинировать фильтры поиска по шаблону как из HTML разметки, так и в RAZOR
Возможность наследование разметки.
Минимизация серверных скриптов, минимизация настроек в атрибутах и настроек при запуске.
Легкое создание своих собственных фильтров.
Получение финального выражения для поиска в перечислениях, так и для поиска через
sql через орм, которые поддерживают Linq to Sql.
Визуализация на откуп дизайнеру.
Все поля, которые участвуют в фильтре, помечаются атрибутами.
Все атрибуты имеют наследника CriterionBaseAttribute, поддерживается локализация,
стоит остановиться на свойстве id, в клиента уходит в нижнем регистре, во избежание
коллизий, свойство можно инициализировать своей строкой, по умолчанию название
свойства типа.
Шаблон HTML, все включения маркируется в виде строки #имя свойства или ID если оно переопределено#
если вы работаете с шаблонами html то вы должны указать путь к шаблону
в атрибуте типа CriterionTemplateAttribute
если вы работаете с указанием шаблона в запросе – можно не указыватьразметку можно вызыавть тремя способами.
1 @(Html.CriterionHtmlTemplate<T>())
2 @(Html.CriterionHtmlTemplate<T>("~/TemplateCriterion/Body2.html"))
и вызов частичных фильтров ( шаблоны не участвуют)
3 @(Html.Criterion<Body>(body => body.MadeIn))
Заполнение опций форм, вы должны реализовать своего поставщика этих опций,
реализовать тип IListItem
если свойство поддерживает null и если надо учитывать эту позицию в поиске
– в строке пишем “null”, если поставить пустую строку, позиция выбора с пустой строкой
не участвует в фильтре поиска.
В слйдере участвуют два значения мин и мах, вы должны так же организовать
поставщика для них, и передать тип через атрибут, все поставщики должны иметь конструктор по умолчании.
Получение результирующего выражения для поиска на сервере:
для ajax или Get запросов
CriterionActivator.GetExpression<Т>(FormCollection collection);
для обычных Post через контроллер
CriterionActivator.GetExpression<Т>();
Вшитый показ справки, справка отображается, если вы укажете поставщика
для справки, тип реализующий ITypeHelp,
Указывать тип нужно при старте приложения
CriterionActivator.SetTypeHelp(typeof(Helper));
Иконка вшита по умолчанию, вы можете назначить свою иконку
при старте приложения.
CriterionActivator.SetUrlImageHelp(string url)
что вынесено наружу:
инициализация календаря для атрибута выбора по диапазону дат
$(".betweendate").datepicker({ dateFormat: "yy-mm-dd" });
инициализация окна справки
$("#dialog").dialog({ autoOpen: false, modal: true, title: "Справка:", height: 400, width: 500 });
все это есть в примере.
Из сторонних библиотек используется:
Yahoo.Yui.Compressor – для сжатия скрипта при шаблонном показе
Dynamic – для создания Expressions
ionson100/CriterionSequel
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|