从CodeBehind更新母版页面的UpdatePanel中的字段

时间:2017-06-10 19:26:50

标签: asp.net updatepanel ajaxcontroltoolkit

我在更新面板内的页面顶部有一个带有购物车计数的母版页,以及另一个更新面板,它包含一个表示搜索类型的下拉框的搜索字段。 (UpdatePanelSearch绑定到AutoCompleteExtender,左侧的Find下拉设置自动填充时要使用的contextkey的类型)

Diagram of master page

我试图让代码隐藏代码放在从属页面中(通常是用户单击或操作某种库存项目)更新购物车数量。

我尝试的事情:

  1. 如果UpdatePanelCart和UpdatePanelSearch都设置为updatemode = automatic,则UpdatePanelSearch将停止对“查找”下拉列表的更新作出反应。

  2. 如果我使用单个更新面板来包装这两个区域,也会发生同样的情况。

  3. 如果我将UpdatePanelCart的UpdateMode设置为条件,那么UpdatePanelSearch工作正常 - 但我没有明显的方式(至少对我来说)强制刷新购物车数量(即,我可以在代码中将其设置为代码隐藏的新值,但在页面完全重绘之前,它实际上不会被重绘。

  4. 这里的正确策略是什么?我承认我并不完全理解为什么#1和#2不起作用(我怀疑AutocompleteExtender是原因,但我真的只是在猜测)

    “搜索”面板的代码如下:

    <asp:UpdatePanel ID="UpdatePanelSearch" runat="server">
        <ContentTemplate>
            <ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender2" runat="server"
                CompletionInterval="150"
                CompletionListCssClass="autocomplete_completionListElement"
                ServiceMethod="GetCompletionList"
                ServicePath="/atomic/Autocomplete.asmx"
                TargetControlID="txtThingToFind"
                UseContextKey="True"
                CompletionSetCount="75">
            </ajaxToolkit:AutoCompleteExtender>
    
            <asp:Panel ID="Panel1" DefaultButton="cmdQuickFind" runat="server">
                <div id="mainSearchArea">
                    <div id="searchLine">
    
                        <div id="signinArea">
                            <asp:Label ID="Label1" runat="server" CssClass="formfield-required"></asp:Label>
                        </div>
                        <asp:Panel ID="Panel2" DefaultButton="cmdQuickFind" runat="server">
                            <div id="searchArea">
                                <div class="row">
                                    <div class="col-lg-8">
                                        <div class="input-group">
                                            <div class="input-group-btn">
                                                <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Find <span class="caret"></span></button>
                                                <ul class="dropdown-menu">
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton1" runat="server">Comic Title</asp:LinkButton></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton2" runat="server">Publisher</asp:LinkButton></li>
                                                    <li class="divider"></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton3" runat="server">Artist</asp:LinkButton></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton4" runat="server">Writer</asp:LinkButton></li>
                                                    <li class="divider"></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton5" runat="server">Storyline</asp:LinkButton></li>
                                                    <li class="divider"></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton6" runat="server">1st Appearance</asp:LinkButton></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton7" runat="server">2nd Appearance</asp:LinkButton></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton8" runat="server">Origin</asp:LinkButton></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton9" runat="server">Death</asp:LinkButton></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton10" runat="server">Special Appearance</asp:LinkButton></li>
                                                    <li class="divider"></li>
                                                    <li>
                                                        <asp:LinkButton ID="LinkButton11" runat="server">Advanced Find...</asp:LinkButton></li>
                                                </ul>
                                            </div>
                                            <!-- /btn-group -->
    
                                            <asp:TextBox ID="TextBox1" runat="server"
                                                CssClass="form-control" AutoCompleteType="None" autocomplete="off"
                                                placeholder="Find comic title or issue...">
                                            </asp:TextBox>
    
                                            &nbsp;
                                                        <asp:Button runat="server" ID="Button1" Text="Go" CssClass="btn btn-primary" />
    
                                        </div>
    
                                        <asp:Panel runat="server" ID="Panel3" CssClass="findScope" Visible="false">
                                            <label>Search: </label>
                                            <asp:RadioButton ID="RadioButton1" runat="server" GroupName="findScope" AutoPostBack="True" />
                                            &nbsp;&nbsp;&nbsp;
                                                <asp:RadioButton ID="RadioButton2" runat="server" Text="All sellers" Checked="True" GroupName="findScope" AutoPostBack="True" />
                                        </asp:Panel>
    
                                    </div>
                                    <!-- /input-group -->
                                </div>
                                <!-- /.col-lg-6 -->
                            </div>
                        </asp:Panel>
                    </div>
                </div>
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>
    

1 个答案:

答案 0 :(得分:0)

至少我的一个问题是我对UpdatePanels的触发机制的模糊理解。

行为#1(购物车未更新)的原因是我没有在购物车标签周​​围放置足够紧密的UpdatePanelCart。除非定义了明确的postbacktrigger,否则自动更新UpdatePanels 只会更新其直接子控件的更改。由于UpdatePanel包装了整个菜单行,因此自动更新没有发生。

行为#2(如果我试图将整个页面包装在更新面板中,任何后果更新的页面上都没有)是相关的 - 我想看到更新的控件都不是直接子控件,所以这是失败。

我的解决方案是更简洁地绘制更新面板,并做一些额外的CSS工作来解决这些不可避免地导致菜单的格式问题。