当执行代码的按钮在更新面板外时,如何在更新面板内使用更新进度
本文关键字:更新 代码 执行 按钮 | 更新日期: 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.Write
在UpdatePanel
内部设计不起作用(请参阅此处的原因:https://stackoverflow.com/a/3878111/1288619)-默认情况下,UpdatePanel
由其所有子控件自动触发。
2.)当你把按钮放在它外面时,你触发的是完全回发,而不是UpdatePanel
的部分渲染——所以没有更新进度。
当你只是将按钮注册为AsyncPostBackTrigger
(无论它在哪里)时,你会得到与第一种情况完全相同的情况。
如果您将按钮注册为(Full)PostBackTrigger
,或者将UpdatePanel
的呈现设置为有条件的,而不是由其子项触发,那么您只会得到与第二种情况完全相同的情况。
因此,按照alexsuslin的建议,只需将UpdatePanel
中某个Literal
控件的文本属性更改为Response.Write
中的文本属性(如果您不想再显示该按钮,请将其可见属性设置为false,但如果移动到外部,请将它注册为AsyncPostBackTrigger
)。