【问题标题】:dropdown onselectedindexchanged event not firing and value kept on postback c#下拉 onselectedindexchanged 事件未触发且值保留在回发 c#
【发布时间】:2018-05-16 04:08:40
【问题描述】:

我无法触发下拉onselectedindexchanged 事件,当我进行选择时,它会重置下拉onpostback 的值,即使我在页面加载事件中有if (!ispostback)

这是asp母版页中的内容页面,以防万一。

<asp:UpdatePanel runat="server">
  <ContentTemplate>                   
    <asp:DropDownList ID="EventSVCProgList" runat="server" 
      EnableViewState="true" 
      OnSelectedIndexChanged="EventSVCProgList_SelectedIndexChanged" 
      AutoPostBack="true"></asp:DropDownList>
  </ContentTemplate>
</asp:UpdatePanel>

protected void Page_Load(object sender, EventArgs e)
{

    if (!IsPostBack)
    {
        SqlConnection constr = new SqlConnection(ConfigurationManager.ConnectionStrings["CBTestDBConnectionString"].ConnectionString);

        SqlCommand eventsvcprogCMD = new SqlCommand("select*from SvcProg where eventatteligable=1", constr); // table name 
        SqlDataAdapter eventsvcadapt = new SqlDataAdapter(eventsvcprogCMD);
        DataSet eventsvcset = new DataSet();
        constr.Open();
        eventsvcadapt.Fill(eventsvcset);  // fill dataset
        EventSVCProgList.DataTextField = eventsvcset.Tables[0].Columns["SvcProgID"].ToString(); // text field name of table dispalyed in dropdown
        EventSVCProgList.DataValueField = eventsvcset.Tables[0].Columns["eventatteligable"].ToString();
        EventSVCProgList.DataSource = eventsvcset.Tables[0];      //assigning datasource to the dropdownlist
        EventSVCProgList.DataBind();  //binding dropdownlist

        constr.Close();
    }

}

protected void EventSVCProgList_SelectedIndexChanged(object sender, EventArgs e)
{
    MessageBox.Show("Eat Poop");
    var somevalue = EventSVCProgList.SelectedValue;
}

【问题讨论】:

  • 请将此添加到页面加载和测试中:if(IsPostBack) return;
  • 请检查页面级别或任何父控件的 ViewState 是否已禁用?
  • 除此之外,在 Web 中使用 Messagebox.Show 是不好的做法。因为它会在服务器上显示消息框。我想它只是为了测试目的而添加的;)

标签: c# sql asp.net postback dropdown


【解决方案1】:

有几件事。

1) 如果尚未添加,则需要在页面顶部添加脚本管理器(如果尚未在页面中添加脚本管理器,则会出现运行时错误)

2) 您需要更改更新面板的内容,如下所示

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:DropDownList ID="EventSVCProgList" runat="server" AutoPostBack="True" OnSelectedIndexChanged="EventSVCProgList_SelectedIndexChanged">

            </asp:DropDownList>

        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="EventSVCProgList" EventName="SelectedIndexChanged" />
        </Triggers>
    </asp:UpdatePanel>

【讨论】:

    【解决方案2】:

    似乎任何父控件或页面 leven ViewState 都已禁用。请在调试模式下检查 EventSVCProgList.EnableViewState 和其他父控件的值。

    【讨论】:

      【解决方案3】:

      感谢您的帮助。它仍然无法正常工作,所以我只想尝试使用 javascript。它必须是母版页或内容页设置方式的一些根本缺陷。

      【讨论】:

      • 没关系,我想通了。这是因为我没有为以下代码使用唯一值:EventSVCProgList.DataValueField = eventsvcset.Tables[0].Columns["eventatteligable"].ToString(); eventatteligable 是下拉列表中所有可用选择的相同值。我将其更改为具有唯一值的列并且它有效。感觉真的很蠢。
      猜你喜欢
      • 1970-01-01
      • 2012-02-28
      • 2011-08-17
      • 2012-12-13
      • 2012-08-25
      • 2016-05-24
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多