2012-01-30 31 views
2

我有一个传统的ASP.NET Web窗体。我们曾经定义了一个按钮,如下:从JavaScript调用ASP.NET EventHandler

<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> 

我该如何在这里从服务器上实际执行我的原始方法?我知道这是一个非常奇怪的问题。我简化了代码,尝试并直接沟通我正在努力完成的任务。有人可以告诉我如何做到这一点?

非常感谢!

回答

0

试试这个:

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

你可以在

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

或好一点且不易出错使用ASP.Net ClientScriptManager写

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

第二个实际上写__doSubmit下,但你得到ASP.Net框架来为你做。同样,第一个将回发该页面,但第二个触发正确的服务器端事件。它融入了ASP.Net架构。或者将工作。

这最近SO question解释这一切远不如我可以(或者在时间,而所做的那样)

-1

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

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

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

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

+0

谁会低估我的答案,请留下评论,解释为什么? – 2016-05-05 21:42:35

+0

不是downvoter,但首先,你不回答实际问题,其次,信号是完全无关的。看看你的答案。 – 2017-07-05 19:11:28