2

好吧,我有一个RangeValidator

<asp:RangeValidator ID="DateRangeValidator" runat="server" ControlToValidate="DateRange"
    ErrorMessage="The date range must be at least 1 day, not more than 30, and neither date can be greater than today's date."
    EnableClientScript="true" MinimumValue="1" MaximumValue="30" CssClass="errortext span9 offset2"
    Display="Dynamic" />

如您所见,最小值为 1,最大值为 30。


那是验证一个隐藏字段(由于我正在测试,它目前是可见的)

<asp:TextBox ID="DateRange" runat="server" ClientIDMode="Static" />

正如您所看到的,我已将客户端 ID 设置为静态,因此它可以很好地找到控件。


当两个日期之一发生更改时,此 JavaScript 方法会填充该隐藏字段:

$('.datepicker').change(function () {
    var startDate = new Date($('#StartDate').val());
    var endDate = new Date($('#EndDate').val());

    if (startDate > Date() || endDate > Date()) {
        $('#DateRange').val(-1);
    }
    else {
        var nDifference = endDate - startDate;
        var one_day = 1000 * 60 * 60 * 24;
        $('#DateRange').val(Math.round(nDifference / one_day) + 1);
    }

    Page_ClientValidate(null);
});

从设置正确的天数差异的角度来看,这种方法非常有效。


Page_ClientValidate被调用时,我已经对其进行了调试,以确保验证器按预期触发,并且确实如此,并且它具有我期望的值。当检查最小值时,它会抓取 1 ......当它与值 8 进行比较时......它正在按预期进行评估...... 8 大于或等于 1。

然而,当检查最大值时,即使它获取最大值 30 ......当它与值 8 进行比较时......表示 8 小于或等于 30 的表达式被评估为假。


我真的希望有人可以在这里帮助我!

世界上怎么8个不少于30个?

4

3 回答 3

10

Type="Integer"RangeValidator.

于 2012-11-23T13:21:06.597 回答
3

添加Type="Integer"到您的范围验证器

于 2012-11-23T13:22:08.303 回答
2

您需要在以下位置设置类型RangeValidator

<asp:RangeValidator ID="DateRangeValidator" runat="server" ControlToValidate="DateRange"
    ErrorMessage="The date range must be at least 1 day, not more than 30, and neither date can be greater than today's date."
    EnableClientScript="true" MinimumValue="1" MaximumValue="30" CssClass="errortext span9 offset2"
    Display="Dynamic"
    Type="Integer" />

相关 MSDN 文档:http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basecomparevalidator.type.aspx

于 2012-11-23T13:22:34.640 回答