从 JavaScript 调用 ASP.NET EventHandler

Posted

技术标签:

【中文标题】从 JavaScript 调用 ASP.NET EventHandler【英文标题】:Calling an ASP.NET EventHandler from JavaScript 【发布时间】:2012-02-22 10:49:00 【问题描述】:

我有一个传统的 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>

我如何从这里实际在服务器上执行我的原始方法?我知道这是一个非常奇怪的问题。我已经简化了代码,试图直接传达我想要完成的事情。谁能告诉我该怎么做?

非常感谢!

【问题讨论】:

【参考方案1】:

你可以写

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

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

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

第二个实际上在幕后写了__doSubmit,但您正在让 ASP.Net 框架为您做这件事。第一个也将回发页面,但第二个也会触发正确的服务器端事件。它更好地集成到 ASP.Net 架构中。两者都行。

最近的SO question 比我能解释的要好得多(或者说当时做了)

【讨论】:

【参考方案2】:

试试这个:

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

【讨论】:

【参考方案3】:

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

protected void Button1_Click(object sender, EventArgs e)

   CallMyRealMethod();

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

使用这两种技术可以使您的代码更具可读性和可维护性。

【讨论】:

谁会否决我的答案,请留下评论解释原因? 不是反对者,但首先,您没有回答实际问题,其次,信号器完全不相关。看看你下面的答案。 这怎么不能回答问题?它提供了一种不同的方法,同时将 op 引入了更好的设计模式和更易于维护的代码。 SignalR 在一个简单的休息服务可以做的地方可能有点矫枉过正,但原理是一样的。关注点分离和单一职责是核心设计原则。

以上是关于从 JavaScript 调用 ASP.NET EventHandler的主要内容,如果未能解决你的问题,请参考以下文章

从 JavaScript 调用 ASP.NET EventHandler

如何从asp.net中的动态按钮调用javascript?

从 ajax 调用到 javascript 日期的 ASP.NET 解析 DateTime 结果

从asp.net mvc中的switch case调用javascript函数

从 javascript 调用 webmethod 时出现 ASP.NET 500 内部服务器错误

ASP.NET / JavaScript - Ajax 调用,如何?