2011-06-12 87 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