2011-06-12 37 views
0

我想要在我的代碼中使用Javascript訪問一個名爲「Button1_Click」的方法,我認爲在我的代碼中存在一些問題,因爲目前我必須點擊兩次以便方法觸發,一次點擊不會觸發該方法。使用JavaScript調用C#方法

我的測試代碼:

// Javascript 

<script type="text/javascript"> 
function CallMe() { document.getElementById('<%= ButtonHidden.ClientID %>').click(); } 
</script> 

// Markup 

<asp:Button ID="ButtonVisible" runat="server" Text="Test Button" 
    OnClientClick="CallMe();"/> 
<asp:Button ID="Button1" runat="server" style="display:none;" Text="Click" 
    OnClick="Button1_Click"/> 

// Code Behind Method 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("http://google.com"); 
} 

我缺少的東西?

回答

0

而是使用javascript爲什麼不直接分配了兩個按鈕在同一臺服務器單擊處理的:

<asp:Button 
    ID="ButtonVisible" 
    runat="server" 
    Text="Test Button" 
    OnClick="Button1_Click" /> 

<asp:Button 
    ID="Button1" 
    runat="server" 
    style="display:none;" 
    Text="Click" 
    OnClick="Button1_Click" /> 

UPDATE:

一個更好的解決辦法是讓你的JavaScript函數返回一個布爾值取決於是否滿足將執行服務器處理程序的某些條件:

<script type="text/javascript"> 
    function CallMe() {   
     if (some condition) { 
      return true; // allow the server to be called 
     } 
     return false; 
    } 
</script> 

,然後在按鈕上同時使用OnClickOnClientClick

<asp:Button 
    ID="ButtonVisible" 
    runat="server" 
    Text="Test Button" 
    OnClientClick="return CallMe();" 
    OnClick="Button1_Click" /> 
+0

其實發布的代碼是一個示例來演示問題,實際的javascript檢查如果表單是dirty或不如下: function checkDirty(){ var ok;如果(isDirty == 1){ ok = window.confirm(「Continue without saving?」); if(ok == true){document.getElementById('<%= Button1.ClientID%>')。click(); } else {return true; } } } – 2011-06-12 08:50:22

+0

@Osama Mortada,在這種情況下,您可以使用'CallMe' javascript函數執行檢查並根據具體情況返回true或false。如果返回'true',它將繼續並調用服務器端處理程序。只需使用以下代碼:'OnClientClick =「返回CallMe();」'並且不要模擬點擊。 – 2011-06-12 08:52:55

+0

@Darin Dimitrov:非常感謝你,它完全按照預期完美工作。這種方式比模擬點擊更清晰。 – 2011-06-12 09:25:29

1

您可以使用按鈕的OnClientClick屬性:

<asp:button id="Button1" 
    text="Test Button" 
    onclientclick="CallMe()" 
    runat="server" onclick="Button1_Click" /> 

那麼你不需要另一個(隱藏)按鈕。您的CallMe()方法應該返回true(如果一切正常)或false(取消回發)。返回頁首返回頁首返回頁首返回頁首返回頁首返回頁首返回頁首返回頁首返回頁首

+0

感謝您的回答,但我們應該包括「返回CallMe()」,以便按達林的回答工作。 – 2011-06-12 09:56:49