2013-04-22 117 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的比较验证。

干杯!