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

时间:2012-02-17 13:10:35

标签: c# asp.net updatepanel ajaxcontroltoolkit

我有一个更新面板,里面有更新进度。我已经在更新面板外移动了按钮,因为当我在更新面板中有按钮时,response.write不工作。现在,在response.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" /> 

2 个答案:

答案 0 :(得分:2)

使用触发器进行更新面板

<asp:UpdatePanel>

.... content ... 

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

答案 1 :(得分:0)

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

2。)当您将按钮放在它之外时,您将触发完整的回发而不是UpdatePanel的部分渲染 - 因此没有更新进度。

如果您只是将按钮注册为AsyncPostBackTrigger(无论在哪里) - 您将获得与第一种情况完全相同的情况。

如果您将按钮注册为(完整)PostBackTrigger,或将UpdatePanel的渲染设置为有条件而不是由其子项触发 - 那么您只需获得与第二种情况。

所以,就像alexsuslin建议的那样,只需将Literal内部某些UpdatePanel控件的text属性更改为Response.Write中的内容(并将按钮的visible属性设置为false,如果你不想再显示它 - 但如果移到外面,请将它注册为AsyncPostBackTrigger