带有asyncpostback触发器的UpdatePanel无法正常工作,并导致奇怪的行为

时间:2019-04-04 13:31:40

标签: asp.net updatepanel

这里发生了一些奇怪的事情。我目前有一个下拉菜单drpIntervention,该下拉菜单具有autopostback =“ true”,直到现在为止我正在调用服务器代码,以根据选定的值禁用/启用控件。我不喜欢回发闪烁,所以我尝试使用AsyncPostBack触发器将代码包装在UpdatePanel中,但正在发生奇怪的事情:

此更新面板的代码如下:

     <asp:UpdatePanel ID="UpdatePanel5" runat ="server" UpdateMode ="Conditional">
      <ContentTemplate >
        <tr>
         <td colspan="3" class="questionFont">
          <table style="width:100%; border-collapse:collapse ">
          <tr>
            <td>
              <b>a.&nbsp;What is the Problem?</b>
            </td>
            <td >
             <asp:DropDownList ID="drpCrisisType" runat="server" autopostback="true" Enabled ="false" OnSelectedIndexChanged="drpCrisisType_SelectedIndexChanged ">
             </asp:DropDownList>
             <span runat="server" style="font-size:12px;  font-family :'Times New Roman';" ID="Span16"><i>(Description)</i></span>
            </td>
         </tr>                                    
   </ContentTemplate>
       <Triggers>  
          <asp:AsyncPostBackTrigger ControlID="drpIntervention" EventName="SelectedIndexChanged" />
       </Triggers>
   </asp:UpdatePanel>

这是用于触发事件的按钮的代码,该按钮位于updatePanel之外

  <tr>
     <td class="questionFont" style="padding-top: 20px">
       <b>4.&nbsp;Did you engage in any?</b>
     </td>
     <td style="padding-top: 20px">
        <asp:DropDownList ID="drpIntervention" runat="server" autopostback="true"  OnSelectedIndexChanged="drpIntervention_SelectedIndexChanged ">
        </asp:DropDownList>
     </td>
   </tr>

所以这不是我的全部代码,<tr>属于一个表,在它上面还有很多其他内容,此更新面板和下拉列表只是其中的一部分。发生的事情是,我在浏览器中加载了页面,一切看起来都很好,然后我在drpIntervention中选择了一个值,并将内容(其他下拉列表和具有用于启用/禁用服务器代码的文本框)包装在更新面板中移至页面中其他内容之上。甚至更奇怪的是,被移动的内容无需执行postback即可正确工作,但是该内容也仍在其原始位置,并且在那里不起作用。

我希望我有道理,当我从drpIntervention中选择一个值时,更新面板中的内容实际上在页面上的2个位置。疯了!

1 个答案:

答案 0 :(得分:0)

我认为问题与我放置template <typename F> using funcType = decltype(getFuncType(&F::operator())); template <typename F, typename ... As> void createStdFunc (F const & f, As ... as) { funcType<F> internalFunc { f }; internalFunc(as...); } 的位置有关。由于我将其放入表格中,因此以某种方式覆盖了格式并将更新面板中的内容置于表格顶部。

解决问题的方法是当我为此问题创建一个表,并用asp:update panel包装整个表时。这样就解决了问题