C# asp.net dropDownList所选值为空
我正在向学校申请发表文章。在下拉列表中,我想显示数据库中存在的值作为默认的预选值。从表“kategorite”中删除列表conatins“emertimi”。当用户选择一个值时,它将“kategoria_id”的id保存在表“artikulli”中。这是我的密码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
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注入。如何做到这一点?我不熟悉这种语言:/