2011-11-18 45 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的控制異步呈現