我在更新面板内的页面顶部有一个带有购物车计数的母版页,以及另一个更新面板,它包含一个表示搜索类型的下拉框的搜索字段。 (UpdatePanelSearch绑定到AutoCompleteExtender,左侧的Find下拉设置自动填充时要使用的contextkey的类型)
我试图让代码隐藏代码放在从属页面中(通常是用户单击或操作某种库存项目)更新购物车数量。
我尝试的事情:
如果UpdatePanelCart和UpdatePanelSearch都设置为updatemode = automatic,则UpdatePanelSearch将停止对“查找”下拉列表的更新作出反应。
如果我使用单个更新面板来包装这两个区域,也会发生同样的情况。
如果我将UpdatePanelCart的UpdateMode设置为条件,那么UpdatePanelSearch工作正常 - 但我没有明显的方式(至少对我来说)强制刷新购物车数量(即,我可以在代码中将其设置为代码隐藏的新值,但在页面完全重绘之前,它实际上不会被重绘。
这里的正确策略是什么?我承认我并不完全理解为什么#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>
<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" />
<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>
答案 0 :(得分:0)
至少我的一个问题是我对UpdatePanels的触发机制的模糊理解。
行为#1(购物车未更新)的原因是我没有在购物车标签周围放置足够紧密的UpdatePanelCart。除非定义了明确的postbacktrigger,否则自动更新UpdatePanels 只会更新其直接子控件的更改。由于UpdatePanel包装了整个菜单行,因此自动更新没有发生。
行为#2(如果我试图将整个页面包装在更新面板中,任何后果更新的页面上都没有)是相关的 - 我想看到更新的控件都不是直接子控件,所以这是失败。
我的解决方案是更简洁地绘制更新面板,并做一些额外的CSS工作来解决这些不可避免地导致菜单的格式问题。