当通过javascript点击按钮时,VB代码后面没有触发

时间:2016-05-19 21:28:08

标签: javascript asp.net vb.net

我有一个向用户提供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文件有关的所有内容,而是设置了一个虚拟错误消息,以查看页面是否有反应,但事实并非如此。

为什么我的代码无法运行?

1 个答案:

答案 0 :(得分:1)

在我看来,点击btnDownload按钮时会同时触发两个回发,并且他们互相竞争:

  1. btnDownload本身
  2. 引起的回发
  3. btnSubmit.click()
  4. 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的事件处理程序中以两个步骤进行响应:第一个响应将清除错误消息,并且可以添加启动客户端脚本以强制第二个回发。但这看起来不太好。