0

我使用下面给出的方法在下拉列表中添加值

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

4

4 回答 4

1

这个问题实际上是关于 asp.net 页面生命周期的。这是一个参考:http: //msdn.microsoft.com/en-us/library/ms178472.ASPX

我猜你是在页面加载时创建下拉列表,但是当回发发生时,你试图在页面控件初始化之前从下拉列表中读取。

您应该在 onload 函数中检查 IsPostBack,如果它是真的,那么尝试在那里重建您的下拉列表。

于 2013-11-12T05:56:05.227 回答
0

我认为这可能会发生,因为当该行下拉列表可能没有任何项目

 string selection = dropdownlist1.selectedItem.text;

被执行。

您必须确保在执行该行之前将数据绑定到下拉列表或添加这样的条件。

string selection="";
if(dropdownlist1.items.count>0) 
selection = dropdownlist1.selectedItem.text;
于 2013-11-12T06:02:06.933 回答
0

很可能您在下拉列表中甚至没有一个项目,并且您正在尝试调用 selecteditem.text。所以显示错误信息。放置一个断点以找出为什么您在 dropdownlist1 中没有项目。

于 2013-11-12T06:18:35.587 回答
0

您应该首先澄清哪个是null. 是dropdownlist1.selectedItem还是dropdownlist1?我建议使用关于下拉列表事件的Viewstate["selectionValue"] = selection;声明。selectedIndeChanged然后我将使用onLoad事件处理程序中的视图状态内容来填充下拉列表选择。

无论如何,我想迈克尔 J. 安德森是对的。您应该花一些时间来了解 asp.net 生命周期。滥用 ASP.NET 的事件机制通常是基于对 ASP.NET 生命周期的理解不足。

于 2013-11-12T06:19:26.977 回答