从JavaScript调用ASP.NET EventHandler

时间:2012-01-30 16:36:44

标签: c# javascript asp.net webforms

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

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

非常感谢你!

3 个答案:

答案 0 :(得分:7)

你可以写

__doPostBack('<%=myButton.ClientID%>','OnClick');
使用ASP.Net ClientScriptManager 或更好一点,更不容易出错

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

第二个实际上写了__doSubmit,但你正在获得ASP.Net框架来为你做。此外,第一个将回发页面,但第二个也会触发正确的服务器端事件。它更好地集成到ASP.Net架构中。要么会工作。

最近的SO question解释了这一切远比我能做得好(或者更确切地说当时做了)

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

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

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

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

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