回发后检索下拉列表选择



>我在方法的下拉列表中添加值,如下所示

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 生命周期的理解不足。

最新更新