更新面板&事件发射两次

时间:2012-06-11 20:41:28

标签: asp.net updatepanel infragistics

我有一个ASPX页面,通过Infragistic控件有3个下拉框。其中1个在UpdatePanel内部,UpdatePanel外部的两个用于控制通过AsynPostBack事件在第3个窗口中显示的内容。 UpdatePanel外部的两个下拉框都在后面的代码中调用相同的函数,但是根据我传递给它的对象,它将在第3个下拉框中显示一些内容。问题是,无论我选择哪个下拉框并且每个调用都将其控制传递给函数,该函数似乎被触发两次,而第二个是即使我点击第一个也始终显示的内容。我怎么阻止它?我希望该功能只需触发一次,具体取决于我选择的控件。我还尝试让每个下拉框指向它自己的功能,但是它们都被触发了......

<td style="width:3px;"><asp:HiddenField ID="pnb_recno" runat="server" /></td>
<td style="width:100px;">Line Of Business:</td>
<td colspan="2" width="150px"><!--OnSelectionChanged="pnb_product_list"-->
    <ig:WebDropDown ID="pnb_ddRgn" runat="server" Width="175px" DropDownContainerHeight="100px" 
        EnableDropDownAsChild="false" TextField="Name" DropDownContainerWidth="175px" Font-Size="11px" 
        StyleSetName="Windows7" OnSelectionChanged="pnb_product_list" AutoPostBack="true"  ClientEvents-SelectionChanged="pnb_chgLOB" > 
        <Items>
            <ig:DropDownItem Text="" Value="" />
            <ig:DropDownItem Text="Global Client Access" Value="Global Client Access" />
            <ig:DropDownItem Text="Solution Center" Value="Solution Center" />
            <ig:DropDownItem Text="Both" Value="Both" />
        </Items>
    </ig:WebDropDown>
</td>
<td style="width:3px;"></td>
<td style="width:100px;">Problem Type:</td>
<td colspan="2" width="150px">
    <ig:WebDropDown ID="pnb_ddPblmTyp" runat="server" Width="175px" DropDownContainerHeight="80px" EnableDropDownAsChild="false" TextField="Name" DropDownContainerWidth="175px" Font-Size="11px" StyleSetName="Windows7" AutoPostBack="true" OnSelectionChanged="pnb_product_list">
        <Items>
            <ig:DropDownItem Text="" Value="" />
            <ig:DropDownItem Text="Infrustructure" Value="Infrustructure" />
            <ig:DropDownItem Text="Products" Value="Products" />
        </Items>
    </ig:WebDropDown>
</td>
<td colspan="2" width="150px">
    <asp:UpdatePanel ID="pnb_udtPnlPrdts" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="pnb_ddRgn"  EventName="SelectionChanged" />
        <asp:AsyncPostBackTrigger ControlID="pnb_ddPblmTyp"  EventName="SelectionChanged" />
    </Triggers>
        <ContentTemplate>
            <ig:WebDropDown ID="pnb_ddPrdts" runat="server" Width="175px" EnableClosingDropDownOnSelect="false" TextField="ProductName" EnablePaging="false" DropDownContainerHeight="175px" EnableMultipleSelection="true" MultipleSelectionType="Checkbox" StyleSetName="Windows7" DisplayMode="DropDown">
                <ClientEvents SelectionChanged="selectedIndexChanged" SelectionChanging="selectedIndexChanging" />
            </ig:WebDropDown>
        </ContentTemplate>
    </asp:UpdatePanel>
</td>



protected void pnb_product_list(object sender, EventArgs e)
{

    try
    {
        using (SqlConnection sqlConnection = new SqlConnection(connectionString))
        {
            using (SqlCommand sqlCommand = new SqlCommand("dbo.getDdProducts", sqlConnection))
            {
                sqlCommand.CommandTimeout = 0;
                sqlCommand.CommandType = CommandType.StoredProcedure;

                if (!String.IsNullOrEmpty(pnb_ddRgn.CurrentValue))
                    sqlCommand.Parameters.AddWithValue("@lob", pnb_ddRgn.CurrentValue);
                else
                    sqlCommand.Parameters.AddWithValue("@alert_type", pnb_ddPblmTyp.CurrentValue);

                using (DataTable dataTable = new DataTable())
                {
                    using (SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlCommand))
                    {
                        dataAdapter.Fill(dataTable);
                    }

                    pnb_ddPrdts.DataSource = dataTable;
                    pnb_ddPrdts.DataBind();
                }
            }
        }
    }
    catch (Exception exception)
    {

    }
}

1 个答案:

答案 0 :(得分:0)

我会尝试为selectionChanged寻找一个AutoPostBackFlags,为valueChanged寻找另一个可能它只是因为这两个事件都被触发是为什么它会回发两次??