在回发后检索下拉列表选择

时间:2013-11-12 05:47:45

标签: c# asp.net

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

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之后也不会丢失。

3 个答案:

答案 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生命周期的不了解。