从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>
从这里开始,我如何在服务器上实际执行我的原始方法?我知道这是一个非常奇怪的问题。我简化了代码,试图直接沟通我想要实现的目标。有人能告诉我怎么做吗?
非常感谢!
您可以在中写入
__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方法。
使用这两种技术可以使代码更加可读和可维护。