我正在使用带有日历扩展器的文本框来输入出生日期。我正在验证今天或更早的日期。我有以下代码:
<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中,我将Type设置为string。如果我将它设置为日期我会收到错误
'cvDateOfBirth'的ValueToCompare属性的值'04 / 21/2013'无法转换为'Date'类型。
我将日期格式化为MM / dd / yyyy,因为如果我没有将日期格式化为MM(并保留默认值),则会插入日期和月份反转或超出范围异常如果月份大于12(SQL 2008 R2)。如果我将Type保留为String,则验证工作正常但仅适用于今年。如果我选择12/31/2012(2012年12月31日)之类的日期,验证将失败。任何人都可以指出我做错了什么。另外,我读了一些帖子,他们说必须为CompareValidator将Type设置为Date,但是我得到了一个错误,我在上面提到过。另外,当我将它与文本框中的字符串进行比较时,为什么将其设置为Date而不是String。谢谢你的帮助。
答案 0 :(得分: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>
在codebehind .cs文件中
protected void OnSave_Click(object sender, EventArgs e)
{
string date = txtDateOfBirth.Text;
}
CompareValidato
r属性ValueToCompare
表示默认格式为dd-MM-yyyy
的日期,因此我们必须手动执行此操作以与其他日期格式进行比较。因此,您可以使用上述两个选项来比较验证日期格式MM/dd/yyyy
。
干杯!