下拉列表selectedIndexchanged事件不会被触发

时间:2012-11-01 09:28:31

标签: c# asp.net postback

我的页面在updatepanel和一个按钮的页面上包含四个下拉列表。我将数据绑定到Page_Load事件的所有下拉列表,当我从任何一个下拉列表中选择项目时,它们各自的selectedindexchanged事件根本不会被触发。我已将所有下拉列表的Autopostback属性设置为true。这会调用page_load事件,但不会触发selectedindexchanged事件.Below是我的标记;

<asp:UpdatePanel ID="UpdatePanelDialysisMachine" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
              <table id="tableDialysisMachine" runat="server" clientidmode="Static" style="width: 98%;
                display: table; margin-left: 10px; margin-right: 5px" border="0" cellpadding="2"
                cellspacing="2" class="table">
                <tr>
                    <th style="height: 10px; width: 100%">
                    </th>
                </tr>
                <tr>
                    <td style="height: 10px; width: 100%;" align="center">
                         <asp:Label ID="LabelDialysisSession" runat="server" Text="Dialysis Session" CssClass="sectionHeader"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <th style="height: 10px; width: 100%">
                    </th>
                </tr>
                <tr>
                    <td style="width: 100%" align="center"><asp:Label ID="LabelMachineMessage" runat="server" Visible="false" ClientIDMode="Static"></asp:Label>
                    </td>
                </tr>                    
                <tr>
                    <td>
                    <fieldset>
                        <legend>
                           <asp:Label ID="LabelSelectMachines" runat="server" Text="Dialysis Machine"></asp:Label>
                        </legend>

                   <%-- </td>
                </tr>
                <tr>
                    <th style="height: 10px">
                    </th>
                </tr>

                <tr>
                    <td>--%>
                        <table style="width: 100%;"  border="0" cellpadding="2" cellspacing="2">
                           <tr>
                                <th colspan="2" style="height: 10px">
                                </th>
                            </tr>
                            <tr>
                                <td class="textRightAlign" style="width: 50%">
                                    <asp:Label ID="LabelMachine" runat="server" Text="Select Machine"></asp:Label>
                                </td>
                                <td class="textLeftAlign" style="width: 50%">
                                    &nbsp;&nbsp;<asp:DropDownList ID="DropdownMachinesList" runat="server" 
                                        CssClass="dropDown" EnableViewState="true" 
                                        onselectedindexchanged="DropdownMachinesList_SelectedIndexChanged" 
                                        AutoPostBack="True" >
                                    </asp:DropDownList>
                                </td>
                            </tr>
                             <tr>
                                <th style="height: 10px" colspan="2">
                                </th>
                            </tr>
                        </table>
                        </fieldset>
                    </td>
                </tr>
                <tr>
                <td>
                <fieldset>
                <legend>
                <asp:Label ID="LabelAssignStaff" runat="server" Text="Assign Staff"></asp:Label>
                </legend>
                <table style="width: 100%;"  border="0" cellpadding="2" cellspacing="2">
                           <tr>
                                <th colspan="2" style="height: 10px">
                                </th>
                            </tr>
                              <tr>
                <td class="textRightAlign">
                    <asp:Label ID="LabelPrimaryDoctor" runat="server" Text="Primary Doctor" EnableViewState="true" ></asp:Label>
                </td>
                <td class="textLeftAlign">
                    <asp:DropDownList ID="DropDownListPrimaryDoctor" runat="server" 
                        ClientIDMode="Static" CssClass="dropDown" EnableViewState="true" 
                        AutoPostBack="True">

                    </asp:DropDownList>
                </td>
                <td class="textRightAlign">
                    <asp:Label ID="LabelSecondaryDoctor" runat="server" Text="Secondary Doctor"></asp:Label>
                </td>
                <td class="textLeftAlign">
                    <asp:DropDownList ID="DropDownListSecondaryDoctor" runat="server" ClientIDMode="Static" CssClass="dropDown" EnableViewState="true">

                    </asp:DropDownList>
                </td>
           </tr>
            <tr>
                <td class="textRightAlign">
                    <asp:Label ID="LabelPrimaryNurse" runat="server" Text="Primary Nurse"  ></asp:Label>
                </td>
                <td class="textLeftAlign" width="20px">
                    <asp:DropDownList ID="DropDownListPrimaryNurse" runat="server" ClientIDMode="Static" CssClass="dropDown" EnableViewState="true">


                    </asp:DropDownList>
                </td>
                <td class="textRightAlign">
                    <asp:Label ID="LabelSecondaryNurse" runat="server" Text="Secondary Nurse" meta:resourcekey="LabelSecondaryNurseResource1"></asp:Label>
                </td>
                <td class="textLeftAlign" width="20px">
                    <asp:DropDownList ID="DropDownListSecondaryNurse" runat="server" ClientIDMode="Static" CssClass="dropDown" EnableViewState="true">

                    </asp:DropDownList>
                </td>
            </tr>
                             <tr>
                                <th style="height: 10px" colspan="2">
                                </th>
                            </tr>

                        </table>
                </fieldset>
                </td>
                </tr>
                <tr>
                            <td style="width:100%" align="center">
                                <asp:Button ID="buttonCreateSession" runat="server" CssClass="buttonExpanded" 
                                    Text="Create Session" ClientIDMode="Static" CausesValidation="false" 
                                    onclick="buttonCreateSession_Click" /></td>
                            </tr>
                             <tr>
                                <th style="height: 10px">
                                </th>
                            </tr>
            </table>
        </ContentTemplate>

    </asp:UpdatePanel>

这是后面的代码;

 protected void Page_Load(object sender, EventArgs e)
{

    if (Page.IsPostBack == false)
    {          
        GetDoctors();
        GetNurse();
        GetMachines();
    }        


} 

 private void GetMachines()
{
    DataTable machines = null;
    try
    {
        machines = m_DialysisSessionManager.GetInactiveMachines();
        if (machines != null)
        {
            //ListItem l8 = new ListItem();
            //l8.Text = "-Select-";
            //l8.Value = "-1";
            //l8.Selected = true;
            //DropDownListmachine.Items.Add(l8);
            DropdownMachinesList.DataSource = machines;
            DropdownMachinesList.DataTextField = "SerialNumber";
            DropdownMachinesList.DataValueField = "id";
            DropdownMachinesList.DataBind();
            DropdownMachinesList.Items.Insert(0, new ListItem("-Select-"));

        }
    }
    catch (Exception ex)
    {
        LoggingHelper.WriteError(ex);
    }
}

/// <summary>
/// Gets doctors list
/// </summary>
private void GetDoctors()
{
    DataTable doctors = null;
    try
    {
        doctors = m_DialysisSessionManager.GetDoctorsList();
        if (doctors != null)
        {

            DropDownListPrimaryDoctor.DataSource = doctors;
            DropDownListPrimaryDoctor.DataTextField = "Name";
            DropDownListPrimaryDoctor.DataValueField = "UserId";
            DropDownListPrimaryDoctor.DataBind();
            DropDownListPrimaryDoctor.Items.Insert(0, new ListItem("-Select-"));


            DropDownListSecondaryDoctor.DataSource = doctors;
            DropDownListSecondaryDoctor.DataTextField = "Name";
            DropDownListSecondaryDoctor.DataValueField = "UserId";
            DropDownListSecondaryDoctor.DataBind();
            DropDownListSecondaryDoctor.Items.Insert(0, new ListItem("-Select-"));
        }
    }
    catch (Exception ex)
    {
        LoggingHelper.WriteError(ex);
    }
}

/// <summary>
/// Gets Nurse list
/// </summary>
private void GetNurse()
{
    DataTable nurse = null;
    try
    {
        nurse = m_DialysisSessionManager.GetNurseList();
        if (nurse != null)
        {


            DropDownListPrimaryNurse.DataSource = nurse;
            DropDownListPrimaryNurse.DataTextField = "Name";
            DropDownListPrimaryNurse.DataValueField = "UserId";
            DropDownListPrimaryNurse.DataBind();
            DropDownListPrimaryNurse.Items.Insert(0, new ListItem("-Select-"));


            DropDownListSecondaryNurse.DataSource = nurse;
            DropDownListSecondaryNurse.DataTextField = "Name";
            DropDownListSecondaryNurse.DataValueField = "UserId";
            DropDownListSecondaryNurse.DataBind();
            DropDownListSecondaryNurse.Items.Insert(0, new ListItem("-Select-"));
        }
    }
    catch (Exception ex)
    {

    }
}
 protected void DropdownMachinesList_SelectedIndexChanged(Object sender, EventArgs e)
{
    Session["machineId"] = DropdownMachinesList.SelectedItem.Text;
}

3 个答案:

答案 0 :(得分:0)

尝试在Page OnInit事件中添加事件处理程序

DropdownMachinesList.SelectedIndexChanged += 
                   new EventHandler(DropdownMachinesList_SelectedIndexChanged);

答案 1 :(得分:0)

尝试将UpdateMode更改为Always。

如果UpdateMode属性设置为Conditional,则需要显式调用UpdatePanel控件的Update方法。

回发是由使用UpdatePanel控件的Triggers属性定义为触发器的控件引起的。

答案 2 :(得分:0)

您始终可以在标记中设置事件处理程序和AutoPostBack属性。您已经为DropdownMachinesList执行了此操作,因此您可以对其他模式执行相同的模式。