当执行代码的按钮在更新面板外时,如何在更新面板内使用更新进度

本文关键字:更新 代码 执行 按钮 | 更新日期: 2023-09-27 18:24:53

我有一个更新面板,里面有更新进度。我把按钮移到了更新面板外面,因为当我把按钮放在更新面板里面时,response.write不工作。现在,在将按钮移动到响应之外后,.write正在工作,但更新进度不正常。当我把按钮放在外面的时候,我怎么能让它工作呢。

 <asp:UpdateProgress ID="UpdateProgress2" runat="server">     
 <ProgressTemplate>      
  <div style="width: 338px; position: relative; top: -420px; left: 80px" class="">          <b>Please Wait...</b>        
    <img runat="server" id="ajaxLoader" style="background-color: White; width: 338px;"                                 src="styles/images/loadImage.gif" alt="loading" />     
    </div>          </ProgressTemplate>         </asp:UpdateProgress>            
      </ContentTemplate>     </asp:UpdatePanel>     
      <asp:Button ID="btn_upload"  runat="server" Text="Upload"                             OnClick="upload_Click" /> 

当执行代码的按钮在更新面板外时,如何在更新面板内使用更新进度

使用更新面板的触发器

<asp:UpdatePanel>
.... content ... 
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btn_upload" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

1.)Response.WriteUpdatePanel内部设计不起作用(请参阅此处的原因:https://stackoverflow.com/a/3878111/1288619)-默认情况下,UpdatePanel由其所有子控件自动触发。

2.)当你把按钮放在它外面时,你触发的是完全回发,而不是UpdatePanel的部分渲染——所以没有更新进度。

当你只是将按钮注册为AsyncPostBackTrigger(无论它在哪里)时,你会得到与第一种情况完全相同的情况。

如果您将按钮注册为(Full)PostBackTrigger,或者将UpdatePanel的呈现设置为有条件的,而不是由其子项触发,那么您只会得到与第二种情况完全相同的情况。

因此,按照alexsuslin的建议,只需将UpdatePanel中某个Literal控件的文本属性更改为Response.Write中的文本属性(如果您不想再显示该按钮,请将其可见属性设置为false,但如果移动到外部,请将它注册为AsyncPostBackTrigger)。