从 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
从 ajax 调用到 javascript 日期的 ASP.NET 解析 DateTime 结果
从asp.net mvc中的switch case调用javascript函数