SelectetValue不返回ASP.NET DropDownList中的选定值

时间:2011-04-01 10:26:04

标签: c# asp.net-4.0

我对以下问题慢慢发疯:在我的ASP.NET页面(目标:.NET 4.0)中,我有DropDownList的以下声明:

<asp:DropDownList ID="cmbRequestState" runat="server" EnableViewState="true">
    <asp:ListItem Text="Pending" Value="0"></asp:ListItem>
    <asp:ListItem Text="Open" Value="1"></asp:ListItem>
    <asp:ListItem Text="Closed" Value="2"></asp:ListItem>
</asp:DropDownList> 

在代码隐藏中的Page_Load事件中,我将cmbRequestState值设置为“2” - 一切都很好,浏览器中组合框中显示的值为“已关闭”,如HTML中相应的<option>标记具有selected="selected"属性。

然后我选择“打开”并使用我页面上的“保存”按钮执行回发。当我在按钮的代码中检索SelectedValue的{​​{1}}时,即使我选择了“1”,它仍然是“2”。

现在我不经常编写ASP.NET应用程序,但我确实对HTML和PHP编程有一些了解,并且从我的WinForms和WPF背景中我希望cmbRequestState包含的值是当前选择...此外,每次用户从列表中选择一个值时,我都不想执行回发。

我在这里缺少什么?如何在打开页面时确保选择当前请求状态,并在用户进行更改时仍然获得新选择?

2 个答案:

答案 0 :(得分:3)

根据page lifecycle,您在Page_Load事件中指定的选定值会覆盖您在按钮的OnClick事件中设置的值。在为控件赋值时,应尝试匹配页面生命周期。

答案 1 :(得分:3)

在Page_Load中,检查它是否是回发请求。如果是,请不要初始化您的组合框。

if (!IsPostback) {
    cmbRequestState.SelectedValue = "2";
}