dropdownlist中的First Item根本不会触发SelectedIndexChanged

AaA*_*AaA 9 c# asp.net

我有以下简单的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testForm.aspx.cs" Inherits="Orbs.testForm" %>
<html>
<body>
    <form id="form1" runat="server">
        <asp:DropDownList ID="dropdown1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="dropdown1_SelectedIndexChanged" ViewStateMode="Enabled">
            <asp:ListItem Value="1" Text="Item 1" />
            <asp:ListItem Value="2" Text="Item 2" />
            <asp:ListItem Value="3" Text="Item 3" />
            <asp:ListItem Value="4" Text="Item 4" />
            <asp:ListItem Value="5" Text="Item 5" />
        </asp:DropDownList>
        <asp:Label runat="server" ID="label1"></asp:Label>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是我背后的代码

using System;

namespace Orbs {
    public partial class testForm: System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {
            label1.Text = "???!!";
        }

        protected void dropdown1_SelectedIndexChanged(object sender, EventArgs e) {
            label1.Text = "Fired on " + dropdown1.SelectedValue;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

当我第一次进入页面时,label1显示'???!!'.现在我从下拉列表中选择一个项目并label1显示正确的值但是当我在下拉列表中选择第一个项目时,它会再次显示???!!而不是Fired on 1

我做错了什么?

编辑:我注意到如果我添加Selected="True"到下拉列表中的任何项目,该项目将成为受害者,并且不会触发事件!

小智 16

对于仍有问题的人; 我以一种不同但更简单的方式解决了它:只需将一个虚拟ListItem添加到DropDownList的开头,并将该项的Enabled属性设置为false.即

<asp:DropDownList ID="dropdown1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="dropdown1_SelectedIndexChanged" ViewStateMode="Enabled">
        <asp:ListItem Value="" Text="" Enabled="false" />
        <asp:ListItem Value="1" Text="Item 1" />
        <asp:ListItem Value="2" Text="Item 2" />
        <asp:ListItem Value="3" Text="Item 3" />
        <asp:ListItem Value="4" Text="Item 4" />
        <asp:ListItem Value="5" Text="Item 5" />
    </asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)


AaA*_*AaA 4

我自己解决了这个问题

我在某处读到关闭ViewStateMode会导致DropDownList无法正常工作。在我的网络应用程序中,我必须关闭ViewStateMode才能完成一些全局任务,然后根据具体情况将其打开。

不知怎的,打开ViewStateMode不起作用DropDownList,我什至尝试打开ViewStateMode页面和母版页,但仍然DropDownList不起作用。它仅在我打开时才ViewStateMode起作用web.config

由于打开不是一个选项,我找到了替代解决方案ViewStateModeweb.config我将其放在这里希望对某人有所帮助。

  • HiddenField在您的表单中添加一个。
  • Page_Load的值进行比较HiddenFieldRequest.Forms[DropDownList1.UniqueID]
  • 如果不同则SelectedIndexChanged手动 调用
  • 将 的值设置HiddenField为 的值Request.Forms[DropDownList1.UniqueID]

  • 只是为了跟进此事。我将 ViewStateMode=Enabled 放在下拉控件上,这解决了问题。也许从现在到那时有些事情发生了变化。 (4认同)