【问题标题】:Update Panel and partial rendering and AsyncPostBackTriggers only firing the first time with AjaxControlToolkit:ComboBox更新面板和部分渲染以及 AsyncPostBackTriggers 仅在第一次使用 AjaxControlToolkit:ComboBox 时触发
【发布时间】:2010-12-18 10:20:57
【问题描述】:

这对于更新面板来说应该是一件非常简单的事情,但我遇到了麻烦。 我想更新 vendorComboBox 选择更改时、gridview 页面以及该面板中的删除按钮上的 updatePanelSelectedVendors。我根本不想刷新供应商组合框,但我不想做一个完整的回帖。

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

<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 控件呢?

【问题讨论】:

    标签: asp.net-ajax updatepanel ajaxcontroltoolkit


    【解决方案1】:

    如果您不想刷新“vendorsComboBox”,那么一开始就不需要将它放在 UpdatePanel 中。将其作为触发器添加到“updatePanelSelectedVendors”就足以更新该 UpdatePanel。

    就页面上有多个 UpdatePanel 而言,您似乎做对了最重要的事情,那就是确保它们具有 UpdateMode="Conditional",否则当它们中的任何一个出现时它们都会更新。

    无论如何,请尝试删除“updatePanelVendorsSelect”面板,因为它根本没有必要,以及任何其他包装不需要更改的内容的面板,看看你的进展如何。它可能会解决您的问题,可能会有所帮助,请告诉我。

    【讨论】:

    • 问题似乎与ajax控制工具包ComboBox有关。我对此进行了编辑。感谢您的回答,证实了我对更新面板的看法,并为我指明了正确的方向(为此我投了赞成票)
    • 不知道为什么组合框不起作用 - 从未使用过其中之一。但有一件事:在您的编辑中,您说“......部分回发工作......” - 它仍然是使用 Asp.Net AJAX 的完整回发。不过,这只是页面的部分重新渲染。
    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多