从JavaScript调用ASP.NET事件处理程序

本文关键字:事件处理 程序 NET ASP JavaScript 调用 | 更新日期: 2023-09-27 18:21:49

我有一个传统的ASP.NET Web表单

<asp:Button ID="myButton" Runat="server" OnClick="myButton_Click" />

在.aspx.cs页面中,我有以下内容:

protected void myButton_Click(object sender, EventArgs e)
{
  // Do Stuff
}

然而,现在有人决定使用一个奇特的JavaScript框架。本质上,我只有:

  <input type="button" id="myButton" onclick="someJSFunction()" />
  <script type="text/javascript">
    function someJSFunction() {
      // Need to execute "myButton_Click" here.
    }
  </script>

从这里开始,我如何在服务器上实际执行我的原始方法?我知道这是一个非常奇怪的问题。我简化了代码,试图直接沟通我想要实现的目标。有人能告诉我怎么做吗?

非常感谢!

从JavaScript调用ASP.NET事件处理程序

您可以在中写入

__doPostBack('<%=myButton.ClientID%>','OnClick');

或者使用ASP.Net ClientScriptManager 更好、更不容易出错

<%= Page.ClientScript.GetPostBackEventReference(myButton, String.Empty) %>; 

第二个实际上是在封面下写__doSubmit,但你需要ASP.Net框架来为你做这件事。此外,第一个将返回页面,但第二个也会触发正确的服务器端事件。它可以更好地集成到ASP.Net体系结构中。不过,两者都可以。

这个最近的SO问题比我能(或者更确切地说,当时)更好地解释了这一切。

试试这个:

<input type="button" id="myButton" onclick="someJSFunction(); __doPostBack('myButton','OnClick');" />

首先,无论按钮在做什么,执行该功能的实际代码都不应该在按钮后面的代码中;它应该在按钮后面的代码调用的方法中。按钮的事件处理程序不应直接由按钮以外的任何对象使用。所以你的按钮处理程序应该是这样的:

protected void Button1_Click(object sender, EventArgs e)
{
   CallMyRealMethod();
}

接下来,查看SignalR。(http://signalr.net)SignalR(简而言之)允许您从javascript中调用C#方法,从C#中调用javascript方法。

使用这两种技术可以使代码更加可读和可维护。