Как проверять даты при создании в Orchard пользовательского фильтра запросов

Мне нужно создать пользовательскую форму фильтра в Orchard с двумя полями: DateFrom и DateTo. Я могу создать его с двумя полями текстового поля со следующим кодом:

public void Describe(dynamic context)
    {
        Func<IShapeFactory, dynamic> form =
            shape =>
            {

                var f = Shape.Form(
                    Id: "EventRangeForm",
                    _DateFrom: Shape.TextBox(
                        Id: "DateFrom", Name: "Date From",
                        Title: T("Events from date"),
                        Description: T("Events from date"),
                        Classes: new[] { "text medium" }
                        ),
                    _DateTo: Shape.TextBox(
                        Id: "DateTo", Name: "Date To",
                        Title: T("Events to date"),
                        Description: T("Events to date"),
                        Classes: new[] { "text medium" }
                        ));
                return f;
            };

        context.Form("EventRangeForm", form);
    }

Если возможно, я хотел бы быть уверен, что пользователь вводит дату в определенном формате. В представлении я обычно прикрепляю средство выбора даты к текстовому полю, но здесь я не могу этого сделать. Есть ли решение более эффективное, чем запись в методе ApplyFilter всего кода для проверки любого возможного ввода, который пользователь может написать в текстовом поле?


person Soel    schedule 05.12.2014    source источник


Ответы (1)


public class DateTimeValidation : FormHandler {
   public override void Validating(ValidatingContext context) {
      if (context.FormName == "EventRangeForm") {
         var min = context.ValueProvider.GetValue("DateFrom");
         //validate...
         context.ModelState.AddModelError("DateFrom", "You did it wrong!");
      }
   }
}

Вы можете создать свое собственное представление формы с проверкой на стороне клиента и красивым средством выбора даты и времени. Или вы можете создать скрипт, который вы включаете в форму, чтобы изменить текстовое поле на средство выбора даты и времени через jquery?

person Hazza    schedule 05.12.2014
comment
Спасибо! Но как я могу включить скрипт в свой IFormProvider? Я пытался с помощью RegisterStartupScript, но это не сработало. - person Soel; 09.12.2014
comment
Внедрите диспетчер ресурсов и включите оттуда свой скрипт. Проверьте этот ответ для примера: stackoverflow.com/a/27020881/1037489 - person Hazza; 09.12.2014
comment
Спасибо, у меня только оставшаяся проблема. Возможно ли, чтобы и DatePicker, и токенизатор Orchard были связаны с одним и тем же полем без конфликтов? Я пытался это сделать, они оба отображаются, но я не могу редактировать то, что я выбираю из токенизатора (т.е. для токенов строки запроса), потому что DatePicker блокирует запись буквенных символов в текстовое поле. - person Soel; 18.12.2014
comment
Я думаю, вам нужно будет написать очень индивидуальный скрипт для выбора даты, извините - person Hazza; 18.12.2014