我在下面给出的方法的下拉列表中添加值
pageload()
{
method(type);
}
public void method(type)
{
dropdownlist1.items.clear();
if(type == "Student")
{
dropdownlist1.items.add("abc");
dropdownlist1.items.add("xyz");
}
}
当我选择下拉列表值时,它会在回发后丢失 我这样做是为了检索
public void method(type)
{
string selection = dropdownlist1.selectedItem.text;
Viewstate["selectionValue"] = selection;
dropdownlist1.items.clear();
if(type == "Student")
{
dropdownlist1.items.add("abc");
dropdownlist1.items.add("xyz");
}
}
但此行发生异常:
string selection = dropdownlist1.selectedItem.text;
异常消息:
{object reference未设置为对象的实例}
我知道它为什么会这样。因为当第一次dropdownlist1
加载时,它无法找到dropdownlist
的对象,因此会发生异常。我的排除是我检索dropdownlist1
选择值的地方,即使在postback
之后也不会丢失。
答案 0 :(得分:1)
这个问题实际上是关于asp.net页面生命周期的。这是一个参考: http://msdn.microsoft.com/en-us/library/ms178472.ASPX
我猜你在页面加载时创建了你的下拉列表,但是当发生回发时,你试图在页面控件初始化之前从你的下拉列表中读取。
您应该在onload函数中检查IsPostBack,如果是,则尝试在那里重建您的下拉列表。
答案 1 :(得分:0)
我认为可能会发生这种情况,因为下拉列表可能没有任何项目
string selection = dropdownlist1.selectedItem.text;
已执行。
在执行该行之前,您必须确保数据绑定到下拉列表或添加这样的条件。
string selection="";
if(dropdownlist1.items.count>0)
selection = dropdownlist1.selectedItem.text;
答案 2 :(得分:0)
您应首先澄清哪个是null
。是dropdownlist1.selectedItem
还是dropdownlist1
?我建议在下拉列表的Viewstate["selectionValue"] = selection;
事件中使用selectedIndeChanged
语句。然后我将使用onLoad
事件处理程序中的viewstate内容来填充下拉列表选择。
无论如何,我认为Michael J. Anderson是对的。您应该投入一些时间来了解asp.net生命周期。滥用ASP.NET的事件机制通常是基于对ASP.NET生命周期的不了解。