更新Panel和部分渲染以及AsyncPostBackTriggers仅在第一次使用AjaxControlToolkit时触发:ComboBox

时间:2009-11-19 18:08:13

标签: asp.net-ajax updatepanel ajaxcontroltoolkit

这应该是一个非常简单的事情与更新面板,但我有麻烦。 我想更新vendorConboBox选择更改时的updatePanelSelectedVendors,gridview页面以及该面板中的删除按钮。我根本不想刷新供应商的combox,但我不想做完整的回复。

问题是异步回发只发生vendorSboBox的第一次选择更改。我在此用户控件中有与其他更新面板类似的面板。如何将它们全部链接在一起,只更新我设置的触发器。

<div class="containerBox vendorsSelectBox">
    <asp:Label ID="lblVendors" runat="server" EnableViewState="false" AssociatedControlID="vendorsComboBox" CssClass="labelHeader" Text="Vendors" />
    <br />
  <asp:UpdatePanel ID="updatePanelVendorsSelect" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
        <ContentTemplate>
            <ajaxToolkit:ComboBox ID="vendorsComboBox" runat="server"
                            DataTextField="Name"
                            DataValueField="VendorID"
                            AutoPostBack="true"
                            AutoCompleteMode="SuggestAppend"
                            DropDownStyle="DropDownList"
                            CssClass="CustomComboBoxStyle" 
                            CaseSensitive="false"
                            AppendDataBoundItems="false" 
                            onselectedindexchanged="vendorsComboBox_SelectedIndexChanged">
            </ajaxToolkit:ComboBox>
     </ContentTemplate>
   </asp:UpdatePanel>
</div>
<asp:Panel ID="panelSelectedVendors" runat="server" CssClass="containerBox selectedFranchiseBox">            
     <label class="labelHeader">Selected Vendors</label>&nbsp;&nbsp;&nbsp;<br />
     <asp:UpdatePanel ID="updatePanelSelectedVendors" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
         <Triggers>
            <asp:AsyncPostBackTrigger ControlID="vendorsComboBox" EventName="SelectedIndexChanged" />
        </Triggers>
        <ContentTemplate>               
                <asp:GridView ID="selectedVendorsList" runat="server"
                   AllowPaging="True"
                   Width="250"
                   DataKeyNames="VendorID" AutoGenerateColumns="False" SkinID="gridViewSkin" 
                    onrowdatabound="selectedVendorsList_RowDataBound" 
                    onpageindexchanging="selectedVendorsList_PageIndexChanging">                        
                    <Columns>
                        <asp:TemplateField HeaderText="Remove?" ItemStyle-Width="10">
                            <ItemTemplate>
                                <asp:CheckBox ID="checkBoxSelect" runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                    </Columns>
                </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
    <br />            
    <asp:Button ID="buttonDeleteSelectedVendor" runat="server" 
                Text="Delete Selected Vendor" EnableViewState="false"
                SkinID="button" style="display:none; float:left; width:150px;" 
                onclick="buttonDeleteSelectedVendor_Click" />
    <asp:Button ID="buttonClearSelectedVendors" runat="server"
                Text="Delete All" SkinID="button" style="float:right; margin-right:25px;" 
                Visible="false"
        onclick="buttonClearSelectedVendors_Click" />
 </asp:Panel>
编辑:我将vendorsComboBox更改为常规DropDownList,部分帖子后退按照我的预期方式工作。为什么不用ComboBox控件?

1 个答案:

答案 0 :(得分:4)

如果您不想刷新'vendorsComboBox',那么首先不需要它在UpdatePanel中。将其添加为“updatePanelSelectedVendors”的触发器足以更新该UpdatePanel。

就页面上有多个UpdatePanel而言,你似乎正在做最重要的事情,那就是确保他们有UpdateMode="Conditional",否则他们都会在任何人更新时更新。

无论如何,尝试删除'updatePanelVendorsSelect'面板,因为它根本不需要,以及任何其他包装不需要更改的内容的面板,并看看你是如何继续的。它可以解决你的问题,它可能会有所帮助,让我知道。