我正在尝试使用ListBox控件的选定值来填充TextBox及其Text属性,以及HiddenField及其value属性。这听起来很简单,我接受了这个:
currentGroupTextBox.Text = currentSiteGroupList.SelectedItem.Text;
currentGroupHiddenField.Value = currentSiteGroupList.SelectedValue;
但是在执行时,ASP.NET会返回错误:
Object reference not set to an instance of an object.
并突出第一行。 currentGroupTextBox和currentGroupHiddenField是在ASPX文件中启用的两个控件,所以我不太清楚为什么ASP.NET会抱怨实例化它们。
答案 0 :(得分:1)
我愿意打赌你的第一行是引用currentSiteGroupList.SelectedItem
的窒息,因为这似乎是最有可能成为空引用的候选者。确保您的代码在ASP.NET页面生命周期中的正确位置执行,以便在幕后正确设置SelectedItem
。
答案 1 :(得分:1)
来自currentSiteGroupList.SelectedItem的SelectedItem可能为null(表示没有选择)。您需要先测试它,然后再将其分配给currentGroupTextBox.Text
答案 2 :(得分:1)
我将尝试将所有问题的答案汇总在一起,包括评论中的问题。
即使SelectionMode="Single"
,列表框也会在没有选择任何内容的情况下开始,除非您指定应在代码中选择哪个项目。
要测试SelectedItem是否为null,请使用以下代码:
if (currentGroupSiteList.SelectedItem != null) { currentGroupTextBox.Text = currentSiteGroupList.SelectedItem.Text; currentGroupHiddenField.Value = currentSiteGroupList.SelectedValue; }
if (!Page.IsPostBack)
支票包裹的吗?如果没有,按下按钮并启动回发将重新加载列表框,从而丢失用户选择的SelectedItem。答案 3 :(得分:0)
是currentGroupTextBox还是currentGroupTextBox为null? 在调试中,如果在该行停止..它是否存在一个或两个? 我发现的一个常见问题是控件放在asp formview或类似的控件上,因此对该控件的引用实际上并不是它的id / name,但更可能是你需要做的;
TextBox myTextBoxReference = (TextBox) formName.FindControl("currentGroupTextBox")
string theValue = myTextBoxReference.Text
另一个常见问题是页面生命周期。因此,如果您的对象不在表单上,但您可能在回发之前存在它之前引用它。 HTH