字符串未被识别为有效的日期时间

时间:2014-06-11 18:09:48

标签: c# asp.net ajax datetime asp.net-ajax

在我的asp.net c#应用程序中使用ajax日历扩展器来收集日期时间信息。当我尝试提交此页面时,它显示String未被识别为有效的datetime.I尝试了不同的转换方式,没有一个适合我。

string date =Request.Form[ txtBookDate.UniqueID];

            DateTime yeer = Convert.ToDateTime(date);
  

字符串未被识别为有效的DateTime。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.FormatException:无法识别字符串   作为有效的DateTime。

     

来源错误:

     

第78行:字符串日期= Request.Form [txtBookDate.UniqueID];   第79行:第80行:DateTime yeer =   Convert.ToDateTime(日期);第81行:DateTime Bookdate =   Convert.ToDateTime(date.ToString());第82行:int WedYear   = Bookdate.Year;

     

源文件:D:\ Sample   Project \ AuditoriumNew \ AuditoriumNew \ Registration.aspx.cs Line:80

     

堆栈追踪:

     

[FormatException:String未被识别为有效的DateTime。]
  System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi,   DateTimeStyles样式)+10404058 System.Convert.ToDateTime(String   值)+83 AuditoriumNew.Index.txtRent_TextChanged(对象发送者,   EventArgs e)在D:\ Sample中   项目\ AuditoriumNew \ AuditoriumNew \ Registration.aspx.cs:80
  System.Web.UI.WebControls.TextBox.OnTextChanged(EventArgs e)+116
  System.Web.UI.WebControls.TextBox.RaisePostDataChangedEvent()+50
  System.Web.UI.WebControls.TextBox.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent()   +10 System.Web.UI.Page.RaiseChangedEvents()+132 System.Web.UI.Page.ProcessRequestMain(Boolean   includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)   1644

     

版本信息:Microsoft .NET Framework版本:4.0.30319;   ASP.NET版本:4.0.30319.17929

ajax Extender的SOURce代码

<asp:Label ID="bok" Text="Booking Date" runat="server"></asp:Label>
                    <asp:TextBox ID="txtBookDate" runat="server" ReadOnly="true"></asp:TextBox>
                    <asp:Image ID="calender" runat="server" ImageUrl="img/cals/calender.png" />
                    <asp:CalendarExtender ID="BookingDate" TargetControlID="txtBookDate" PopupButtonID="calender"
                        runat="server" PopupPosition="TopRight" DaysModeTitleFormat="dd/MM/yyyy" 
                        TodaysDateFormat="dd/MM/yyyy">
                    </asp:CalendarExtender>

实际代码

 protected void txtRent_TextChanged(object sender, EventArgs e)
        {
            float CentralAmnt;
            float renter;

            double rent = Convert.ToDouble(txtRent.Text);
            renter = float.Parse(rent.ToString());


            ///Calculate CTValue
            double CTValue = Convert.ToDouble(12.36 / 100);
            double CTax = CTValue;
            float CentralTax = float.Parse(CTax.ToString());

            CentralAmnt = renter * CentralTax;


            ///Calculate LT Value

            double LTax = 0.15;
            float LuxTax = float.Parse(LTax.ToString());
            float LuxAmnt = renter * LuxTax;
            string s = txtBookDate.Text;
            DateTime yeer;

             yeer = Convert.ToDateTime(s);

            //DateTime yeer = Convert.ToDateTime(s);
            DateTime Bookdate = Convert.ToDateTime(yeer.ToString());
            int WedYear = Bookdate.Year;
            if (WedYear < 2014)
            {
                float TotAmnt = renter + LuxAmnt;

                txtTotal.Text = TotAmnt.ToString();
                LuxuaryTaxAmnt = LuxAmnt;


            }
            else
            {
                float TotAmnt = renter + CentralAmnt + LuxAmnt;

                txtTotal.Text = TotAmnt.ToString();
                LuxuaryTaxAmnt = LuxAmnt;
                CentralTaxAmnt = CentralAmnt;
            }
        }

1 个答案:

答案 0 :(得分:0)

如果txtBookDate为空并且您决定在txtRent中输入一个值,那么您将继续接收&#34; String未被识别为有效的DateTime&#34;错误,因为txtBookDate是EMPTY = NULL ...或者如果您确实插入了日期,请确保它的格式合理。

所以问题是:在输入txtRent的值之前,是否在txtBookDate中输入了值?

你的代码在txtRent_TextChanged期间运行的原因是什么?这是唯一的方法吗?

尝试以下操作,至少在这里我确保 yeer 有一个&#34;默认&#34;值,以便您不接收&#34; String未被识别为有效的DateTime。&#34;在这种情况下:

DateTime yeer;

if (!string.IsNullOrEmpty(txtBookDate.Text))
    yeer = Convert.ToDateTime(txtBookDate.Text);
else
    yeer = new DateTime(9999, 12, 31);