在我的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;
}
}
答案 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);