0

基于来自MSDN的示例,我正在尝试使用 RangeValidator 在代码隐藏中验证日期范围

共有三个文本框,一个用于到达日期、出发日期和所需的旅行日期。单击提交按钮后,如果用户在其他两个文本框中指定的范围之外输入了所需的游览日期,则应显示 RangeValidator 的消息。

RangeValidator 的最小值和最大值在按钮的 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 分钟再提问 :)

4

3 回答 3

2

您需要在 RangeValidators 属性中设置最小值和最大值,它会验证输入,如果没有错误,则启用可以创建回发的控件。

于 2011-11-18T12:04:03.593 回答
1

You need to set the RangeValidators min max propertis in the client side. You can call a javascript function OnClientClick of the Submit Button. And you can set the Min Max value of the RangeValidator from here. Like This:

<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>
于 2011-11-18T12:53:37.500 回答
0

嗨,请删除 dipslay="dynamic" 并尝试您的代码可能会按预期工作:由于第一次点击,后面的代码被调用,如果您使用 Panel 和 Telerik 控件进行异步渲染,它基本上会发生

于 2013-12-11T07:41:22.960 回答