Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 无法强制转换类型为‘;System.Web.UI.LiteralControl’;错误_Asp.net_Asp.net Mvc - Fatal编程技术网

Asp.net 无法强制转换类型为‘;System.Web.UI.LiteralControl’;错误

Asp.net 无法强制转换类型为‘;System.Web.UI.LiteralControl’;错误,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我得到这个错误: 无法将“System.Web.UI.LiteralControl”类型的对象强制转换为“System.Web.Controls.TextBox”类型 我从ASPX页面中的查询字符串输入文本输入框,下面是代码: <EditItemTemplate> <asp:TextBox ID="GV_Post_ID" runat="server" text='<%# Request.QueryString["Post_I

我得到这个错误: 无法将“System.Web.UI.LiteralControl”类型的对象强制转换为“System.Web.Controls.TextBox”类型

我从ASPX页面中的查询字符串输入文本输入框,下面是代码:

<EditItemTemplate>
                        <asp:TextBox ID="GV_Post_ID" runat="server" text='<%# Request.QueryString["Post_ID"] %>'></asp:TextBox>
                    </EditItemTemplate>
我得到了上面的错误。下面是隐藏的代码:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DSRConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "INSERT INTO RCA_Events(Post_ID, Date, Description) VALUES(@Post_ID, @Date, @Description)";
            cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = ((TextBox)GV_InlineEditing.Rows[0].Cells[2].Controls[0]).Text;
            cmd.Parameters.Add("@Date", SqlDbType.VarChar).Value = ((TextBox)GV_InlineEditing.Rows[0].Cells[3].Controls[0]).Text;
            cmd.Parameters.Add("@Description", SqlDbType.VarChar).Value = ((TextBox)GV_InlineEditing.Rows[0].Cells[4].Controls[0]).Text;
请注意,如果我从ASPX页面中删除querystring,然后手动插入该值,那么它就会工作。请。救命啊。 谢谢

问题出在这里:

(文本框)GV\u在线编辑。行[0]。单元格[2]。控件[0]

该单元格中的第一个控件不是您认为的
文本框。让我们假设
GV\u InlineEditing.Rows[0]
可以安全地获得所需的行。这样做:

TextBox myTextBox = GV_InlineEditing.Rows[0].FindControl("GV_Post_ID") as TextBox;
cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = myTextBox.Text;
TextBox myTextBox = GV_InlineEditing.Rows[0].FindControl("GV_Post_ID") as TextBox;
if (myTextBox != null)
{
    cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = myTextBox.Text;
}
else
{
    // Do something here.  Default value for the post id?
}
该代码可以更安全,如下所示:

TextBox myTextBox = GV_InlineEditing.Rows[0].FindControl("GV_Post_ID") as TextBox;
cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = myTextBox.Text;
TextBox myTextBox = GV_InlineEditing.Rows[0].FindControl("GV_Post_ID") as TextBox;
if (myTextBox != null)
{
    cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = myTextBox.Text;
}
else
{
    // Do something here.  Default value for the post id?
}

问题是,当您使用GridView时,您将数据绑定字段转换为项模板,然后您将一个文本框添加到编辑项模板,然后将其自己的ID添加到该文本框,例如txtProduct,函数。控件[0]将找不到它,它不知道你的文本框的ID,所以在这种情况下,你必须提供你想要定位的文本框的ID。因此,您不应该使用.Controls[0]而应该使用.FindControl(“txtProduct”)。在您的情况下,而不是:

(TextBox)GV_InlineEditing.Rows[0].Cells[2].Controls[0].Text;
您应该这样做:

(TextBox)GV_InlineEditing.Rows[0].Cells[2].FindControl("GV_Post_ID").Text;