【问题标题】:JQuery Datepicker Validation not working for Multiple Dates with MVCJQuery Datepicker Validation 不适用于 MVC 的多个日期
【发布时间】:2012-06-02 23:47:02
【问题描述】:

我没有使用 jquery.ui 的 datepicker,因为我需要选择多个日期,所以我在 EditorTemplate 中为我的 Date 字段使用 Keith Wood's datepicker:

    @model Nullable<DateTime>
    @{
        string name = ViewData.TemplateInfo.HtmlFieldPrefix;
        string id = name.Replace(".", "_");
        string dt = Model.HasValue ? String.Format("{0:d}",(string)Model.Value.ToShortDateString()) : string.Empty;
    }        
    @Html.Hidden("", dt, new { @class = "datefield", @type = "date", @id = id, style = "display:none;" })
    <script type="text/javascript">
        $(document).ready(function () {
            $('#@id').datepick({
                renderer: $.datepick.themeRollerRenderer,
                multiSelect: 31,
                onSelect: function (dates) {
                    var value = '';
                    for (var i = 0; i < dates.length; i++) {
                        value += (i == 0 ? '' : ',') + $.datepick.formatDate(dates[i]);
                    }
                    $('#@name').val(value)
                    var form = $(this).parents().find('form')[0];
                    // form.validate(); // this causes error (Object doesn't support property or method 'validate') whats up with that?
                }
            });
        });    
    </script>

这是我的 ViewModel 继承的数据类中 DateTime 字段的定义:

    [Required]
    [DataType(DataType.Date)]
    public Nullable<DateTime> StartDate { get; set; }

这是返回无效状态的客户端验证片段:

    form.validate({ 
        rules:{
            StartDate: { 
                required: true
                ,dpDate: true 
            }
        },
        messages: {
            StartDate: 'Please choose at least one date'
        }
    });

    if (form.valid()) { // never reached }

所以现在我正在完成对这个内联日期选择器的最后一点验证。如您所见,我有一个由日期选择器填充的隐藏字段,它包含有效日期,但以逗号分隔,并且不会转换为日期时间。当我只选择一个日期时它是有效的。是否有将分隔数据验证为类型的通用解决方案?

我基本上是使用多个日期循环数据库调用,但仍想验证分隔数据是否为 ​​DateTime 类型。

问候,

布兰登

【问题讨论】:

  • 另请注意,删除现有的自定义 form.validate({ ... }) 函数不会以任何方式改变结果,它似乎被覆盖并且无效。
  • 另一个注意事项,我尝试将我的模型更改为 public List> StartDate { get;放; } 产生与之前相同的结果

标签: jquery asp.net-mvc validation data-annotations jquery-ui-datepicker


【解决方案1】:

jQuery 插件需要一个 jQuery 对象。

如果您的表单 ID 是 myForm,您可以像这样使用插件:

$('#myForm').validate({ ... });

$('#myForm').valid();

【讨论】:

  • 这显然不是问题,我可以用一个日期验证就好了,问题是隐藏字段的值为“mm/dd/yyyy,mm/dd/yyyy " 这显然不是一个有效的日期,我需要验证来解析逗号分隔的值。只是为了好玩,我确保表单始终是一个 jQuery 对象,不依赖于纯 javascript,$("#trCreate form").validate({ ... }) 产生相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多