基于MSDN的示例,我正在尝试使用RangeValidator验证代码隐藏中的日期范围
有三个TextBox,一个用于到达日期,出发日期和所需的旅行日期。单击提交按钮后,如果用户在其他两个TextBox中指定的范围之外输入所需的巡视日期,则应显示RangeValidator的消息。
RangeValidator的min&最大值在按钮的Click事件中设置。其ControlToValidate(所需的巡视日期)在标记中设置。
问题是:如果前两个TextBox中的任何一个文本框中都有文本,则不会触发提交按钮的Click事件。如果在任何其他组合中输入文本,则事件将触发(但显然会引发异常)。
标记:
Arrival date:
<br />
<asp:TextBox ID="txtArrival" runat="server"></asp:TextBox>
<br />
Departure date:
<br />
<asp:TextBox ID="txtDeparture" runat="server"></asp:TextBox>
<br />
Tour date:
<br />
<asp:TextBox ID="txtTourDate" runat="server"></asp:TextBox>
<br />
<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtTourDate"></asp:RangeValidator>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="submit" onclick="btnSubmit_Click"/>
代码隐藏::
protected void btnSubmit_Click(object sender, EventArgs e)
{
RangeValidator1.MinimumValue = txtArrival.Text;
RangeValidator1.MaximumValue = txtDeparture.Text;
RangeValidator1.Type = ValidationDataType.Date;
RangeValidator1.Validate();
if (!RangeValidator1.IsValid)
{
RangeValidator1.ErrorMessage = "The tour date must fall between " + txtArrival.Text + " and " + txtDeparture.Text;
}
}
编辑:感谢您的回答,但事实证明我没有将RangeValidator的EnableClientScript属性设置为“false”。新规则 - 我要等30分钟再问一次问题:)
答案 0 :(得分:2)
您需要在Range Validators属性中设置最小值和最大值,它会验证输入,如果没有错误,则启用可以创建回发的控件。
答案 1 :(得分:1)
您需要在客户端设置RangeValidators min max properties。您可以调用提交按钮的Javascript函数OnClientClick。您可以从此处设置RangeValidator的Min Max值。 像这样:
<asp:Button ID="btnSubmit" runat="server" Text="submit" OnClientClick="return SetProperties();" onclick="btnSubmit_Click"/>
<script type="text/javascript">
function SetProperties()
{
var r = document.getElementById("RangeValidator1");
r.MaximumValue = document.getElementById("txtDeparture").value;
r.MinimumValue = document.getElementById("txtArrival").value;
r.ControlToValidate = "txtTourDate";
}
</script>
答案 2 :(得分:0)
您好请删除dipslay =“dynamic”并尝试您的代码可能会按预期工作:由于第一次单击时,后面的代码被调用,基本上如果您使用Panel和Telerik控件进行异步呈现