在RangeValidator.ControlToValidate中输入文本时,不会触发Button.Click事件

时间:2011-11-18 11:58:59

标签: c# asp.net .net validation rangevalidator

基于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分钟再问一次问题:)

3 个答案:

答案 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控件进行异步呈现                      
            

相关问题