>我在方法的下拉列表中添加值,如下所示
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;
异常消息:
{对象引用未设置为对象的实例}
我知道它为什么会来。 因为第一次加载时dropdownlist1
找不到dropdownlist
的对象,所以发生了异常。 我的查询是我检索dropdownlist1
选择值的地方,即使在postback
之后也不会丢失。
这个问题实际上是关于 asp.net 页面生命周期的。以下是参考:http://msdn.microsoft.com/en-us/library/ms178472.ASPX
我猜您正在页面加载时创建下拉列表,但是当回发发生时,您正在尝试在初始化页面控件之前从下拉列表中读取。
您应该在加载函数中检查IsPostBack,如果这是真的,则尝试在那里重建下拉列表。
我认为这可能是因为当该行时下拉列表可能没有任何项目
string selection = dropdownlist1.selectedItem.text;
被执行。
您必须确保数据绑定到下拉列表,然后才能执行该行或添加这样的条件。
string selection="";
if(dropdownlist1.items.count>0)
selection = dropdownlist1.selectedItem.text;
很可能您在下拉列表中甚至没有一个项目,并且您正在尝试调用 selecteditem.text。 所以显示错误消息。放置一个断点以找出为什么下拉列表 1 中没有项目。
您应该首先澄清哪个是null
。是dropdownlist1.selectedItem
还是dropdownlist1
?我建议在下拉列表的selectedIndeChanged
事件上使用Viewstate["selectionValue"] = selection;
语句。然后,我将使用 onLoad
事件处理程序中的视图状态内容来填充下拉列表选择。
无论如何,我想迈克尔·J·安德森是对的。您应该花一些时间来了解 asp.net 生命周期。滥用 ASP.NET 的事件机制通常是基于对 ASP.NET 生命周期的理解不足。