2013-09-27 87 views
1

我有一個日曆控件,當選擇一個日期時,它應該以「dd-mm-yyyy」格式顯示在關聯的文本框中。並有一個比較驗證器,它應該驗證所選日期,如果它大於今天的日期。我已經CompareEndTodayValidator 的ValueToCompare財產‘這樣寫的'CompareEndTodayValidator'不能轉換爲'Date'類型。

<asp:TextBox runat="server" ID="tb_date" BackColor="White" ></asp:TextBox> 
    <asp:Calendar ID="EndDate" runat="server" 
        OnSelectionChanged="EndDate_OnSelectionChanged" 
     </asp:Calendar> 
      <asp:CompareValidator runat="server" ID="CompareEndTodayValidator" ErrorMessage="Exam date can't be less than today" 
ControlToValidate="tb_date" Type="Date" Operator="LessThanEqual" >    </asp:CompareValidator> 


protected void Page_Load(object sender, EventArgs e) 
{ 
CompareEndTodayValidator.ValueToCompare = DateTime.Now.ToString("dd-MM-yyyy"); 
} 

    protected void EndDate_OnSelectionChanged(object sender, EventArgs e) //COMPARE VALIDATOR FOR EXAM DATE 
{ 

    tb_date.Text = EndDate.SelectedDate.ToString("dd-MM-yyyy"); 
} 

它顯示了一個錯誤

值'26 -09-2013' ’不能轉換爲類型‘日期’。

請大家幫忙。我已經通過改變type =「string」來嘗試它。但是失敗了。當把mm-dd-yyyy frmat正常工作時,它可以正常工作。但我需要dd-mm-yyyy格式

回答

1

問題是您將所選日曆值轉換爲的日期格式與默認DateTime.Parse,這是Comparer驗證器無疑在內部使用的。使用不同的日期格式,或使用CustomValidator控件,以便您可以手動控制日期分析格式。

DateTime date = DateTime.Parse("26-09-2013"); // Fails 

我希望這會有所幫助。

編輯 - 使用定製的校驗

<asp:CustomValidator runat="server" ID="CompareEndTodayValidatorCust" OnServerValidate="ServerValidation" ControlToValidate="tb_date" ValidateEmptyText="True" ErrorMessage="Exam date can't be less than today" /> 

protected void ServerValidation (object source, ServerValidateEventArgs arguments) 
{ 
    System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture; 
    string format = "dd-MM-yyyy"; 
    DateTime dtToValidate = DateTime.ParseExact(tb_date.Text, format, provider); 

    arguments.IsValid = (dtToValidate <= DateTime.Now.AddDays(-1)); 
} 

附:

同樣在表單提交處理程序或頁面加載方法中,您需要在允許保存操作繼續之前檢查Page.IsValid == true

P.S.S

如果你想獲得更看中你能提供的ClientValidationFunction財產JavaScript方法和驗證客戶端了。儘管如此,這可能是過度的。

+0

你能幫我用自定義驗證寫@詹姆斯 – ARATHY

+0

見我最後的編輯 – James

+0

我已經這樣做了。不工作。控制不會到ServerValidation() – ARATHY

1

的CustomValidator嘗試像跟在後面

ASPX

<asp:TextBox runat="server" ID="tb_date" BackColor="White" ></asp:TextBox> 
<asp:Calendar ID="EndDate" runat="server" 
      OnSelectionChanged="EndDate_OnSelectionChanged" ></asp:Calendar> 
    <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Invalid date"> 
</asp:CustomValidator><br /> 

代碼:

protected void EndDate_OnSelectionChanged(object sender, EventArgs e) //COMPARE VALIDATOR FOR EXAM DATE 
{ 
    CustomValidator1.IsValid = true; 
    DateTime SelectedDate = EndDate.SelectedDate.Date; 
    DateTime NowDate = DateTime.Now; 
    tb_date.Text = SelectedDate.ToShortDateString(); 
    if (SelectedDate.Date > NowDate.Date) 
    { 
     CustomValidator1.IsValid = false; 
    } 
} 
相關問題