ASP.NET RangeValidator的MaximumValue无法转换为Date类型

时间:2014-04-26 12:47:01

标签: c# asp.net validation type-conversion rangevalidator

我有一个简单的ASP.NET页面,其中我正在尝试验证日期。所选日期必须大于或等于今天的日期。

我收到的错误是"价值' 26/04/2104 13:55:38' DateCheck'的MaximumValue属性无法转换为类型'日期'"当我尝试这样做时。

这是aspx中的代码:

 Date: <asp:Calendar ID="txtDate" runat="server" BackColor="White" 
        BorderColor="#999999" CellPadding="4" DayNameFormat="Shortest" 
        Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" Height="180px" 
        Width="200px">
        <DayHeaderStyle BackColor="#CCCCCC" Font-Bold="True" Font-Size="7pt" />
        <NextPrevStyle VerticalAlign="Bottom" />
        <OtherMonthDayStyle ForeColor="#808080" />
        <SelectedDayStyle BackColor="#666666" Font-Bold="True" ForeColor="White" />
        <SelectorStyle BackColor="#CCCCCC" />
        <TitleStyle BackColor="#999999" BorderColor="Black" Font-Bold="True" />
        <TodayDayStyle BackColor="#CCCCCC" ForeColor="Black" />
        <WeekendDayStyle BackColor="#FFFFCC" />
    </asp:Calendar><br /><br />

    <asp:RangeValidator ID="DateCheck" runat="server" ErrorMessage="The date must be greater than or equal to current date" ControlToValidate="txtDate" 
    Display="Dynamic" Type="Date" ></asp:RangeValidator >

以下是文件背后的代码:

protected void Page_PreRender(object sender, EventArgs e)
    {
        DateCheck.MinimumValue = DateTime.Now.ToString();
        DateCheck.MaximumValue = DateTime.Now.AddYears(90).ToString();
    }

任何人都可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我猜你很容易通过Javascript实现这一目标 我的方式在下面

首先得到今天这样的日子

function validate_date(date_to_validate)
{
        var today = new Date();
        var dd = today.getDate();
        var mm = today.getMonth()+1; //January is 0!
        var vdate[]=date_to_validate.split('/');// Assuming Formated Date You will pass in mm/dd/yyyy
        var yyyy = today.getFullYear();

        if(dd<10) {
            dd='0'+dd
        } 
        if(mm<10) {
            mm='0'+mm
        } 
        today = mm+'/'+dd+'/'+yyyy;

        if(vdate[2]>yyyy+90 ||vdate[2]<yyyy)
        {
            return false;
        }else if(vdate[2]==yyyy && ( vdate[0]<mm ))
        {
           return false;
        }else if(vdate[2]==yyyy && (vdate[1]<dd))
        {
           return false;
        }
        else
        {
           return true;
        }
}

此函数对于您的最小和最大日期条件返回true,否则返回false ...

我认为Range验证器可以支持字符串范围,整数范围.... 并且您在服务器上验证将花费您额外的请求和响应.... 使用客户端验证可以做得更好

答案 1 :(得分:1)

最小值和最大值的格式应为yyyy/MM/dd。 解决了我的问题。