RangeValidator限制范围是出生日期后18年

时间:2014-09-11 19:09:04

标签: c# asp.net validation rangevalidator

这个问题可能难以传达。目标是确保输入文本框的日期是从出生之日起至少18年。

我有一个文本框:

<asp:TextBox ID="DateFrom" runat="server"/> 

我有一个范围验证器:

<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="DateFrom"    ErrorMessage="Age has to be more than 18 years" Type="Date"></asp:RangeValidator>

我有一个实体对象:

rvtxtExecutiveDateTo.MinimumValue = (insiderObj.Insider.dateBirth ??     DateTime.MinValue).ToString("MM/dd/yyyy");

我已将代码中的范围验证器设置为:

 RangeValidator1.MinimumValue = (insiderObj.Insider.dateBirth ??    DateTime.MinValue.AddYears(-18)).ToString("MM/dd/yyyy");

1 个答案:

答案 0 :(得分:0)

问题出现AddYears方法调用相同。

你有:

(insiderObj.Insider.dateBirth ?? DateTime.MinValue.AddYears(-18))

你可能意味着:

(insiderObj.Insider.dateBirth ?? DateTime.MinValue).AddYears(-18)

当然,这假定dateBirth可空的值(DateTime?)。否则,根本没有理由?? DateTime.MinValue

此外,您不应在MM/dd/yyyy电话中硬编码ToString格式。每the MSDN documentation

  

注意

     

如果您为ValidationDataType.Date属性指定BaseCompareValidator.Type而未以编程方式为应用程序设置文化,则应使用与文化无关的格式,例如 YYYY/MM/DD ,适用于MaximumValueMinimumValue属性。否则,日期可能无法正确解释。

将您的格式切换为"yyyy/MM/dd",或将您的应用程序配置为具有文化感知功能,并通过CultureInfo.CurrentCulture或完全省略该参数。