Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
C# asp.net dropDownList所选值为空_C#_Asp.net Mvc - Fatal编程技术网

C# asp.net dropDownList所选值为空

C# asp.net dropDownList所选值为空,c#,asp.net-mvc,C#,Asp.net Mvc,我正在向学校申请发表文章。在下拉列表中,我想显示数据库中存在的值作为默认的预选值。从表“kategorite”中删除列表conatins“emertimi”。当用户选择一个值时,它将“kategoria_id”的id保存在表“artikulli”中。这是我的密码 if (e.Item.ItemType == ListItemType.EditItem) { DropDownList drpdKategoria = e.Item.FindCo

我正在向学校申请发表文章。在下拉列表中,我想显示数据库中存在的值作为默认的预选值。从表“kategorite”中删除列表conatins“emertimi”。当用户选择一个值时,它将“kategoria_id”的id保存在表“artikulli”中。这是我的密码

if (e.Item.ItemType == ListItemType.EditItem)
            {
                DropDownList drpdKategoria = e.Item.FindControl("drpdKategoria") as DropDownList;
                SqlConnection con = new SqlConnection(connection);
                string Qry = "select * from kategoria";
                string id = Request.QueryString["id"];
                SqlDataAdapter da = new SqlDataAdapter(Qry, con);
                DataSet ds = new DataSet();
                DataSet ds2 = new DataSet();
                DataSet ds3 = new DataSet();
                con.Open();
                da.Fill(ds);
                string kategoria_id = "select kategoria_id from artikulli where id='" + id + "'";
                SqlDataAdapter dk = new SqlDataAdapter(kategoria_id, con);
                dk.Fill(ds2);
                var kategoria_id_result = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
                string emertimi = "select emertimi from kategoria where id='" + kategoria_id_result + "'";
                SqlDataAdapter de = new SqlDataAdapter(emertimi, con);
                de.Fill(ds3);

                drpdKategoria.DataSource = ds;
                drpdKategoria.DataValueField = "id";
                drpdKategoria.DataTextField = "emertimi";              
                drpdKategoria.DataBind();
                drpdKategoria.SelectedValue = drpdKategoria.Items.FindByText(emertimi).Value;
                con.Close();
                con.Dispose();
                ds.Dispose();
                ds2.Dispose();
                ds3.Dispose();
                da.Dispose();
                dk.Dispose();
                de.Dispose();
            }
        }

但它显示了这个错误:对象引用未设置为对象的实例。在这一行:
drpdKategoria.SelectedValue=drpdKategoria.Items.FindByText(emerimi.Value)

我猜
emertimi
包含一个在下拉列表中找不到的值。因此,
FindByText
将返回
null
,获取
值将导致此异常

在尝试获取
值之前测试结果


另外,不要使用单独的
Dispose
调用,而是使用
using
语句。请注意SQL注入的风险:改用参数。

这是因为您要查找的项目尚未找到。您应该对代码进行故障排除,并找出emertimi在运行时的设置。

string emrtimi=“select emertimi from kategoria where id='6'”您正在尝试选择/findbytext和实际SQL语句。这就是你在下拉列表中看到的吗?如果您在下拉列表中没有看到此选项:从kategoria中选择emertimi,其中id='6',则您没有寻找合适的项目…string emertimi=“从kategoria中选择emertimi,其中id='6'”,这意味着kategoria_id=6可以。我的观点仍然是。如果您检查由
FindByText
返回的值,是否为
null
?drpdKategoria.SelectedValue为“6”,我认为这是错误的,因为emertimi不是整数,它显示的是kategoria_id,这显示为错误{“对象引用未设置为对象的实例”。}我强烈建议您考虑防御性的编码,特别是SQL注入。如何做到这一点?我不熟悉这种语言:/