我有一个向用户提供TDF文本文件的报告。在用户可以提交之前,选择两个过滤器并填写两个字段,如果没有它们点击“下载”按钮,则会出现友好的错误消息,请求用户在继续之前填写这些字段。我的测试部门希望在成功下载文件后此错误消失。响应对象阻止页面回发,因此错误消息可能会消失。
为了解决这个问题,我添加了一个额外的,不可见的按钮,连接到创建TDF的代码,并将Javascript点击事件附加到可见按钮。
<asp:Button ID="btnSubmit" runat="server" Text="" Style="visibility:hidden;" /><asp:Button ID="btnDownload" runat="server" Text="Download TDF" OnClientClick="document.getElementById('ctl00_MainContent_btnSubmit').click();" />
我的问题是,由于我不知道的原因,当单击此隐藏按钮时,后面的代码不会触发。如果我在隐藏按钮上发出警报,它就会发射得很好,告诉我按钮被点击了。该事件在按钮的事件列表中注册,我确实已将事件监听器连接起来:
Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
我已经注释了与创建和下载TDF文件有关的所有内容,而是设置了一个虚拟错误消息,以查看页面是否有反应,但事实并非如此。
为什么我的代码无法运行?
答案 0 :(得分:1)
在我看来,点击btnDownload
按钮时会同时触发两个回发,并且他们互相竞争:
btnDownload
本身btnSubmit.click()
OnClientClick
来电引起的回发
醇>
当我测试你的代码时,我得到了一些不可预知的结果:有时会调用事件处理程序btnSubmit_Click
,有时不会。
如果您可以在客户端代码中检测到不再需要该错误消息,则可以在回发发生之前直接在OnClientClick
中清除它:
<asp:Button ID="btnDownload" runat="server" Text="Download TDF" OnClientClick="clearErrorMessage();" />
function clearErrorMessage() {
if (/* All required fields are filled */) {
// Clear the error message
}
}
否则,您可能需要在代码隐藏中的btnDownload
的事件处理程序中以两个步骤进行响应:第一个响应将清除错误消息,并且可以添加启动客户端脚本以强制第二个回发。但这看起来不太好。