好吧,我有一个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岁?
答案 0 :(得分:10)
您错过RangeValidator
上的Type="Integer"
。
答案 1 :(得分:3)
将Type="Integer"
添加到您的范围验证器
答案 2 :(得分: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