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