1

如果请求的日期已经存在,我试图限制用户输入新记录。我试图进行计数以查看将放置记录的表是否已经具有该日期 1 或不是 0。我有一个日历扩展器附加到具有日期的文本框。

我不断得到:

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

或者

无法将“System.Web.UI.WebControls.TextBox”类型的对象转换为“System.IConvertible”类型。

取决于我尝试过的不同事情。

这是我的代码。

 TextBox startd = (TextBox)(DetailsView1.FindControl("TextBox5"));
                TextBox endd = (TextBox)(DetailsView1.FindControl("TextBox7"));
                DropDownList lvtype = (DropDownList)(DetailsView1.FindControl("DropDownList6"));

                DateTime scheduledDate = DateTime.ParseExact(startd.Text, "dd/MM/yyyy", null);
                DateTime endDate = DateTime.ParseExact(endd.Text, "dd/MM/yyyy", null);

                DateTime newstartDate = Convert.ToDateTime(startd.Text);
                DateTime newendDate = Convert.ToDateTime(endd.Text);

                //foreach (DataRow row in sd.Tables[0].Rows)
                DateTime dt = newstartDate;

                while (dt <= newendDate)
                {
                    //for retreiving from table
                    Decimal sd = SelectCountDate(dt, lvtype.SelectedValue, countDate);

                    String ndt = Convert.ToDateTime(dt).ToShortDateString();

                    // //start = string.CompareOrdinal(scheduledDate, ndt);
                    // // end = string.CompareOrdinal(endDate, ndt);

                    //trying to make say when leavetpe is greater than count 1 then throw error. 
                    if (sd > 0)
                    {
                        Response.Write("<script>alert('Date Already Requested');</script>");
                    }
                    dt.AddDays(1);

                }

^^^ 此版本抛出:“字符串未被识别为有效日期类型”错误

但是,如果我用以下任何一个替换字符串:

  /*-----------------------Original------------------------------------
                string scheduledDate = Convert.ToDateTime(endd).ToShortDateString();
                string endDate = Convert.ToDateTime(endd).ToShortDateString();
                -------------------------------------------------------------------*/

                /*----------10-30---------------------------------------
                DateTime scheduledDate = DateTime.Parse(startd.Text);
                DateTime endDate = DateTime.Parse(endd.Text);
                ------------------------------------------------------*/

我得到“无法将'System.Web.UI.WebControls.TextBox'类型的对象转换为'System.IConvertible'。” 错误。

我只是想阻止用户输入已经存在的记录日期。

                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox5" runat="server" Height="19px"
                        Text='<%# Bind("lstdate",  "{0:MM/dd/yyyy}") %>' Width="67px"></asp:TextBox>
                    <asp:CalendarExtender ID="TextBox5_CalendarExtender" runat="server" Enabled="True"
                        TargetControlID="TextBox5">
                    </asp:CalendarExtender>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                        ControlToValidate="TextBox5" ErrorMessage="*Leave Date Required" 
                        ForeColor="Red"></asp:RequiredFieldValidator>
                    <br />
                    <asp:CompareValidator ID="CompareValidator18" runat="server" 
                        ControlToCompare="TextBox7" ControlToValidate="TextBox5" 
                        ErrorMessage="Leave date cannot be after start date" ForeColor="Red" 
                        Operator="LessThanEqual" ToolTip="Must choose start date before end date"></asp:CompareValidator>
                </InsertItemTemplate>
4

3 回答 3

1

检查 (!string.IsNullOrEmpty(startd.Text))

通过 : 传送器

于 2012-10-30T16:58:52.117 回答
0

"Unable to cast object of type 'System.Web.UI.WebControls.TextBox' to type 'System.IConvertible'"当您尝试解析文本框本身而不是 textbox.Text 时会发生这种情况。

这段代码究竟是什么时候执行的?如果它在加载页面时执行,文本框将为空,因此您尝试解析一个空字符串,这显然是正确的格式。

于 2012-10-30T16:19:11.510 回答
0

由于它似乎startd.Text为空,因此您应该只DateTime.ParseExact在文本不为空或不为空时才这样做。您可以使用:

if(!string.IsNullOrEmpty(startd.Text))
{
    // do stuff
}
于 2012-10-30T17:26:15.650 回答