2011-11-18 42 views
0

基于实例从MSDN进入,我想验证代码隐藏的日期范围,使用RangeValidator控件Button.Click事件将不触发时文本RangeValidator.ControlToValidate

有三个文本框,一个用于抵达日期,出发日期和期望的游览日期。点击提交按钮后,如果用户在其他两个文本框中指定的范围之外输入了所需的巡视日期,则会出现RangeValidator的消息。

的RangeValidator控件的最小&最大值在该按钮的Click事件设置。其ControlToValidate(所需的巡视日期)在标记中设置。

的问题是:如果有任何的第一个两个文本框的文本提交按钮的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属性设置为“假”。新规则 - 我将等待30分钟,然后再提问:)

回答

2

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

+0

@dbr:之前的任何在[页面生命周期]代码隐藏事件发生JavaScript验证(http://msdn.microsoft.com/en-us/library/ms178472。 aspx) – abatishchev

1

您需要设置RangeValidators最小最大的客户端propertis。您可以调用提交按钮的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> 
+0

在JavaScript中设置属性时,可以在验证器的属性本身中设置属性? – abatishchev

+0

是的,你可以设置,但你应该把它们设置在客户端而不是在服务器端。如果你在服务器端这样做,那么为什么使用范围验证器?因为它本质上是在客户端进行验证。现在范围验证器的min和max属性绑定到txtArrival和txtDeparture。所以我使用了Set Properties功能。 – Sudipta

0

嗨请删除dipslay =“动态”,并尝试你的代码可能如预期:由于这在第一次点击,后面的代码是获取调用,它发生基本上如果你使用的面板和Telerik的控制异步呈现