2014-12-05 41 views
0

我需要在Orchard中创建一个具有两个字段的自定义过滤器窗体:DateFrom和DateTo。 我能够用下面的代码两个TextBox领域创建:如何验证在Orchard中创建自定义查询过滤器时的日期

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方法中编写整个代码更高效的解决方案来验证用户可以在文本框中编写的任何可能的输入?

回答

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将文本框变成日期时间选择器?

+0

谢谢!但是我怎样才能在我的IFormProvider中包含一个脚本?我尝试了RegisterStartupScript,但没有奏效。 – Soel 2014-12-09 10:16:34

+0

注入资源管理器并从中包含您的脚本。检查此答案为例:http://stackoverflow.com/a/27020881/1037489 – Hazza 2014-12-09 11:56:33

+0

谢谢,我只剩下一个问题。是否有可能将DatePicker和Orchard标记器都关联到同一个字段而没有冲突?我试图做到这一点,但它们都显示,但我不能编辑我从标记器中选择的内容(即对于查询字符串标记),因为DatePicker会阻止在文本框中编写字母字符。 – Soel 2014-12-18 09:30:52

相关问题