Asp.NET DropDownList选定项的值未更改

17

标记:

            <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没有触发任何事件。

当我点击按钮进行postback时,所选项的值仍然是DropDownList中第一项的值。 我错过了什么?

注意:请停止回复和编辑帖子。 既然已经得到答案,我们可以将其保留为原样。

5个回答

50
如果您在 Page_Load 中进行数据绑定,那么您实质上也会重置所选项目。
您应该将存在于 Page_Load 中的任何绑定代码都包装在一个 if(!IsPostBack) 块中。
if(!Page.IsPostBack)
{

    // Your binding code here ...

}

5

你的代码可能在页面回传后也执行了,导致清空文本框,因此失去了选择和其他内容。

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


0

所以这个答案是最常见原因的“显而易见”的解决方案。然而,还有一个更令人惊讶的问题可能会导致这种情况!我的列表值来自数据库,这些值包含换行符和回车符:“\r\n”。这些值看起来像无辜的空格,但实际上它们并不是!我的解决方案是删除这些隐藏的字符值。希望能对你有所帮助。


-1

嘿,对于第一个索引,不需要添加所有内容,您需要在特定的索引号上插入。

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

1
这个答案不会有任何区别,因为它只是添加了一个项目。问题已经被回答了,谢谢。 - Bahamut

-1

是的,您忘记添加下拉列表框 Autopostback=true 属性了。

请在您的 .aspx 页面中尝试以下操作:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接