2012-04-27 67 views
11

标记:Asp.NET的DropDownList SelectedItem.Value不改变

  <div style="float:left;margin-top:15px;width:80px"> 
       <asp:DropDownList ID="MyList" runat="server" Width="100px"></asp:DropDownList> 
      </div> 

代码:

 // clear vehicles list 
     MyList.Items.Clear(); 

     // add 'all' option 
     MyList.Items.Add(new ListItem("ALL", "0")); 

     // add assets 
     foreach (CustomClass item in items) 
      MyList.Items.Add(new ListItem(item.Name, item.ID.ToString())); 

没有事件触发了的SelectedIndexChanged因为它是没有必要的。

当我点击回发按钮时,selecteditem的值仍然是DropDownList中第一项的值。我错过了什么?

备注 请停止回复和编辑帖子。我们可能会保留它,因为它已经被回答了。

回答

31

如果你在数据绑定Page_Load,你试试以下基本上也重置SelectedItem。

您应该将Page_Load中存在的任何绑定代码包装在if(!IsPostBack)块中。

if(!Page.IsPostBack) 
{ 

    // Your binding code here ... 

} 
+3

dammit。我没有注意到这一点。谢谢 – Bahamut 2012-04-27 04:05:38

4

您的代码可能在执行回发后执行,清除方块,从而失去选择和所有内容。

如果是这样,请尝试将代码包装在if(!Page.IsPostBack) { ... }之类的东西中。

-2

是你缺少添加下拉列表的AutoPostBack =真..

请在.aspx页面

+0

这将强制回发每次选择一个项目... – 2012-04-27 04:03:33

-1

嘿嘿第一个索引添加所有不需要添加。你需要插入特定索引号

MyList.Items.Insert(0, "ALL"); 
+1

这个答案不会有任何区别,因为它只是添加一个项目。问题已经得到解答,谢谢。 – Bahamut 2012-04-27 13:01:38

0

所以这个答案是最明显的解决方案。但是,还有一个更令人惊讶的问题可能导致此问题!我的列表值来自数据库,值有换行和回车:“\ r \ n”。这些值看起来像一个无辜的空间,但实际上他们不是!我的解决方案是删除这些隐藏的Char值。希望能帮助到你。