【问题标题】:ASP.NET RangeValidator's MaximumValue cannot convert to type DateASP.NET RangeValidator 的最大值无法转换为日期类型
【发布时间】:2014-04-26 12:47:01
【问题描述】:

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

当我尝试执行此操作时,我收到一条错误消息,提示“'DateCheck' 的 MaximumValue 属性的值 '26/04/2104 13:55:38' 无法转换为类型 'Date'”。

这是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();
    }

谁能帮忙解决这个问题?

【问题讨论】:

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


    【解决方案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...

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

    【讨论】:

    • 我希望这对你有用
    【解决方案2】:

    MinimumValue 和MaximumValue 的格式应为yyyy/MM/dd。 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2015-04-09
      相关资源
      最近更新 更多