2012-01-30 87 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