3

我是 c# 的新手,所以请记住这一点。

我正在为一个宁静的网络服务构建 ac# 前端,并且我有一个列表框,我已将项目放入:

listBox.DataSource = list;
listBox.DataTextField = "name";
listBox.DataValueField = "id";
listBox.DataBind();

然后我选择一个项目并单击一个激活此代码的按钮:

long id = Convert.ToInt64(listBox.SelectedItem.Value);

问题是 SelectedItem 为空。

就像我说的,我是 c# 的新手,所以我不知道可能出了什么问题。

4

3 回答 3

4

在您的Page_Load活动中,请执行以下操作:

if(!IsPostBack)
{
    listBox.DataSource = list;
    listBox.DataTextField = "name";
    listBox.DataValueField = "id";
    listBox.DataBind();
}

注意:这将在第一次加载页面时绑定您的列表框,而不是在每次回发时绑定,这是之前清除您选择的项目的原因。在 ASP.NET 中,单击事件处理程序在Page_Load事件发生之后发生,因此如果您在绑定时没有设置条件,那么每次回发都会在您的事件处理程序有机会找出用户选择的内容之前清除数据.

于 2013-08-16T15:07:02.913 回答
2
if(!Page.IsPostBack)
{    
    listBox.DataSource = list;
    listBox.DataTextField = "name";
    listBox.DataValueField = "id";
    listBox.DataBind();
}

这必须在您的Page_Load.

于 2013-08-16T15:09:08.230 回答
0

即使您已正确编码以防止在回发时混淆您的选择,为了避免相同的症状,还必须满足另一个要求。如果您提供 DataValueField,则该列中的值必须是唯一的。请参阅问题ASP.NET DropDownList not retain selected item on postback

于 2013-11-04T05:57:16.433 回答