2013-04-22 98 views
0

我正在使用帶日曆擴展器的文本框來輸入出生日期。我正在驗證日期爲今天或更早。我有以下代碼:使用CompareValidator驗證日期

<asp:TextBox ID="txtDateOfBirth" runat="server" </asp:TextBox><ajaxToolkit:CalendarExtender ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtDateOfBirth" Format="MM/dd/yyyy" </ajaxToolkit:CalendarExtender> 

<asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="txtDateOfBirth" ErrorMessage="Must be today or older" Display="Dynamic" Operator="LessThanEqual"></asp:CompareValidator> 

我在我的Page_Load

cvDateOfBirth.ValueToCompare = DateTime.Today.ToString("MM/dd/yyyy"); 

在CompareValidator下面我有類型設置爲字符串。如果我將其設置爲日期,則出現錯誤

'cvDateOfBirth'的ValueToCompare屬性值'04/21/2013'無法轉換爲類型'Date'。

我格式化日期MM/DD/YYYY,因爲如果我不格式化先有MM的日期(並使其保持默認值),它在插入時的日期和月份逆轉或出範圍異常如果月份大於12(SQL 2008 R2)。如果我將字符串作爲字符串,則驗證將正確運行,但僅適用於今年。如果我選擇2012年12月31日(2012年12月31日)的日期,則驗證失敗。任何人都可以指出我做錯了什麼。此外,我閱讀了一些帖子,他們說Type必須設置爲Date for CompareValidator,但是我收到了上面提到的錯誤。此外,爲什麼將它設置爲日期而不是字符串,當我將它與文本框中的字符串進行比較時。感謝幫助。

+0

傳遞日期格式爲DD/MM/YYYY,並且查看它是否工作或不需要 – 2013-04-22 03:20:51

+0

您需要通過Type =「Date」 – 2013-04-22 03:26:17

+0

如果我將日期作爲DD/MM/YYYY比日期中的DB和月份是相反的 – Teebow 2013-04-22 03:29:19

回答

1

首先,你需要做的(分配比較日期今天日期):

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      cvDateOfBirth.ValueToCompare = DateTime.Today.Date.ToString("dd/MM/yyyy"); 
     } 
    } 

然後2的方式獲得結果,要::


第一種方式:

<asp:TextBox ID="txtDateOfBirth" runat="server"></asp:TextBox><ajaxtoolkit:CalendarExtender 
      ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtDateOfBirth" 
      Format="dd/MM/yyyy"> 
     </ajaxtoolkit:CalendarExtender> 
     <asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="txtDateOfBirth" SetFocusOnError="true" 
      Type="Date" Operator="LessThanEqual" ErrorMessage="Incorrect Date" 
      ForeColor="Red"></asp:CompareValidator> 

然後在代碼後面的.cs文件中獲取選擇日期在MM-dd-yyy保存數據基地::

protected void OnSave_Click(object sender, EventArgs e) 
{ 
    DateTime selcetdDate=Convert.ToDateTime(txtDateOfBirth.Text); 
    string date = selcetdDate.ToString("MM/dd/yyyy"); 
} 


其他的方式來實現這一目標:

<script type="text/javascript"> 
    function getDOB() { 
     var selected = document.getElementById('lbl_date').value; 
     var txtDateOfBirth = document.getElementById('txtDateOfBirth'); 
     if (selected != "") { 
      var st = selected.split('/'); 
      txtDateOfBirth.value = st[1] + '/' + st[0] + '/' + st[2]; 
     } 
     else 
      txtDateOfBirth.value = ""; 
    } 
</script> 

<asp:TextBox ID="txtDateOfBirth" runat="server"></asp:TextBox> 
     <asp:TextBox ID="lbl_date" runat="server" Text="" style="display:none;" onchange="getDOB()"></asp:TextBox> 
     <ajaxtoolkit:CalendarExtender 
      ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="lbl_date" PopupButtonID="txtDateOfBirth" 
      Format="dd/MM/yyyy"> 
     </ajaxtoolkit:CalendarExtender> 
     <asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="lbl_date" SetFocusOnError="true" 
      Type="Date" Operator="LessThanEqual" ErrorMessage="Incorrect Date" 
      ForeColor="Red"></asp:CompareValidator> 
    </div> 

在代碼隱藏的.cs爲默認格式文件

protected void OnSave_Click(object sender, EventArgs e) 
{ 
    string date = txtDateOfBirth.Text; 
} 

CompareValidato [R財產ValueToCompare日期dd-MM-yyyy所以我們必須手動做這個比較w ith其他日期格式。所以你可以使用上述兩個選項來獲得日期格式MM/dd/yyyy的比較驗證。

乾杯!