如何在ASP.NET中使用JavaScript触发按钮的点击事件

40

如何从JavaScript触发服务器端的按钮点击事件?

我尝试了以下代码:

document.getElementById("<%= ButtonID.ClientID %>").click();

但是没有用。我该怎么做?

10个回答

46

您可以将以下代码放入 JavaScript 函数中:

__doPostBack('btnSubmit','OnClick');

或者像这样做:

$('#btnSubmit').trigger('click');

1
这行代码调用了服务器端事件吗? - Boomer
1
@Boomer 请查看此链接:http://codethatworkedforme.blogspot.com/2011/08/some-tricks-for-asynchronous-postback.html - Glory Raj
3
@pratapk,你能更新一下那个评论的链接(或者加到回答里面)吗?我对它很感兴趣,但是链接已经失效了。 - Amicable
1
你忘了提到第二个例子需要jQuery,并且ASP Net Forms从不生成这样好的ID。 - Roel

23
var clickButton = document.getElementById("<%= btnClearSession.ClientID %>");
clickButton.click();

那个解决方案对我有效,但请记住,如果你的asp按钮具有

Visible="False"
属性,则该解决方案将无效。如果要隐藏应通过该脚本触发的按钮,则应使用 <div hidden></div> 来隐藏它。


3
非常感谢,没有人提到以上任何一种方法无法在Visible='False'的情况下起作用。使用<div hidden></div>对我非常有效。谢谢! :) - SarangK
1
在按钮上直接使用style="display:none;"也可以起到作用。 - Santos

16

我使用了下面的JavaScript代码,并且它有效...

var clickButton = document.getElementById("<%= btnClearSession.ClientID %>");
clickButton.click();

2
它对我不起作用。页面会刷新,但代码从未运行后台代码。 - Akami Kurai

7

这里发布的解决方案都不能满足我的需求,以下是我最终解决问题的方法。

// In Server Side code
protected void Page_Load(object sender, EventArgs e)
{
    Page.GetPostBackEventReference(hiddenButton);
}

// Javascript
function SetSaved() {
    __doPostBack("<%= hiddenButton.UniqueID %>", "OnClick");
}

// ASP
 <asp:Button ID="hiddenButton" runat="server" OnClick="btnSaveGroup_Click" Visible="false"/>

Visible="false" 这就是为什么它不起作用,只需使用 <div hidden></div> 将其隐藏即可。 - Sebastian 506563
2
回顾这件事,我们真正需要做的是使用Ajax调用服务器端函数,而不是依赖于WebForms。 - Amicable

3

我曾在两天内遇到这个问题,突然意识到我在一个提交按钮的javascript方法中使用了这个click方法(针对asp按钮)...

我的意思是 ->

我有一个HTML提交按钮和一个ASP按钮,如下所示:

<input type="submit" value="Siparişi Gönder" onclick="SendEmail()" />
<asp:Button ID="sendEmailButton" runat="server" Text="Gönder" OnClick="SendToEmail" Visible="True"></asp:Button>

SendToEmail() 是 Default.aspx 中的服务器端方法 SendEmail() 是像这样的 javascript 方法:

<script type="text/javascript" lang="javascript">
   function SendEmail() {
            document.getElementById('<%= sendEmailButton.UniqueID %>').click();
            alert("Your message is sending...");
        }
</script>

这个方法 "document.getElementById('<%= sendEmailButton.UniqueID %>').click();" 在Chrome浏览器中无法运行。但在IE和Firefox中可以正常工作。

然后我尝试了很多方法来在Chrome中执行 "SendToEmail()" 方法。

突然间,我将html提交按钮改为像这样的html按钮,现在它可以正常工作:

<input type="button" value="Siparişi Gönder" onclick="SendEmail()" />

祝你度过愉快的一天...


1

我可以这样使事情运作起来:

在由html按钮执行的javascript函数内部:

document.getElementById("<%= Button2.ClientID %>").click();

div内的ASP按钮:

<div id="submitBtn" style="display: none;">
   <asp:Button ID="Button2" runat="server" Text="Submit" ValidationGroup="AllValidators" OnClick="Button2_Click" />
</div>

除了下面的代码不执行,一切都是从.cs文件运行的。没有消息框和重定向到同一页面(刷新所有框):
 int count = cmd.ExecuteNonQuery();
 if (count > 0)
 {
   cmd2.CommandText = insertSuperRoster;
   cmd2.Connection = con;
   cmd2.ExecuteNonQuery();
   string url = "VaccineRefusal.aspx";
   ClientScript.RegisterStartupScript(this.GetType(), "callfunction", "alert('Data Inserted Successfully!');window.location.href = '" + url + "';", true);
  }

任何想法为什么这些行不会执行?

0
$("#"+document.getElementById("<%= ButtonID.ClientID %>")).trigger("click");

0
document.FormName.btnSubmit.click(); 

对我来说可行。享受吧。


0

您可以从JavaScript代码中填充一个隐藏字段,并从JavaScript执行显式回发。然后在服务器端,检查该隐藏字段并执行必要的操作。


0
我遇到的问题是未指定验证组。按照下面的方式添加ValidationGroup="none",问题得以解决。
<asp:Button ID="BtnQuickSearch" runat="server" Text="Search" 
OnClick="BtnQuickSearch_Click" ValidationGroup="none" />

我必须提到,页面上还有另外两个带有按钮的表单,它们都有自己指定的验证组。而这个按钮没有指定验证组,因此 onclick 事件根本没有触发。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接