我试图将Asp:Listbox中当前选定项的文本存储在变量中。该值总是存储为空值,或者我收到错误消息"System. NullReferenceException:'对象引用未设置为对象的示例。'"
下面的列表框声明
<asp:ListBox ID="lbModules" runat="server" AutoPostBack="true" OnSelectedIndexChanged="lbModules_SelectedIndexChanged" ></asp:ListBox>
SelectedIndex的代码已在下面更改'
protected void lbModules_SelectedIndexChanged(object sender, EventArgs e)
{
string code = lbModules.SelectedItem.Text;
int week = 1;
UpdateTextBox(week, code);
}
'列表框在其他地方被一个方法填充,该方法循环并使用listbox.items.add添加值
我试过listbox.SelectedItem.Text, listbox.SelectedValue.Text, listbox.SelectedItem.Value, listbox.SelectedValue.Value,
Nothing I try返回选定值的文本,总是抛出异常或返回null。
1条答案
按热度按时间yc0p9oo01#
好了,首先,使用选定的索引更改事件没有多大意义,除非您有autopostback=true。
所以,如果用户要在文本框中输入一些信息等,然后用户说点击你的提交按钮,那么我真的不确定使用选定的索引更改事件的任何价值。
因此,该标记:
和代码背后:
请注意,我们只加载列表框一次。因为对于页面上的任何事件触发器,加载时的事件首先触发,然后您为给定的按钮或事件编写存根。因此,如果您加载了lb、网格或实际上“任何”数据,但没有包括所有重要的if!IsPostBack代码存根?
那么你就不能真正建立一个工作的网页!!!(所以,我最近建立的200多个网页都有并且总是有真实的的第一页加载,因为正如所指出的,加载事件总是在回发时触发。所以,如果你再次加载lb或任何东西,它会爆炸并覆盖你所做的选择)。
所以,以上结果是这样的:
然而,如果用户要输入数据,选择内容,然后点击提交按钮,那么当然你可能会删除autopostback = true。并将上述代码放在按钮单击之后,而不是使用选定的索引更改事件。
即使您使用代码将项目添加到lb中,上述规则仍然适用。
因此,请输入以下列表框:
我们仍然需要自动回发,因此下面的代码:
现在我们看到了:
因此,要么你错过了自动回发,要么你每次回发时都要重新运行代码来填充lb,这将如前所述地取消用户所做的任何选择。