【问题标题】:Calling an ASP.NET EventHandler from JavaScript从 JavaScript 调用 ASP.NET EventHandler
【发布时间】: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>

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

非常感谢!

【问题讨论】:

    标签: c# javascript asp.net webforms


    【解决方案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 在一个简单的休息服务可以做的地方可能有点矫枉过正,但原理是一样的。关注点分离和单一职责是核心设计原则。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 2010-09-05
        • 2011-04-30
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多