【问题标题】:How to call c# button click method from javascript?如何从javascript调用c#按钮单击方法?
【发布时间】:2012-05-15 22:40:44
【问题描述】:

我正在尝试从 javascript 函数调用服务器端按钮单击方法,但它不起作用,我能知道我做错了吗?

aspx代码:

<asp:Button ID="ButtonFns" Name="ButtonFns" runat="server" Text="Finish" 
            OnClientClick ="CountDownTick()" class="finish" onclick="ButtonFns_Click" />

Javascript 代码:

function CountDownTick() {
if (_currentSeconds <= 0) {
    document.getElementById('<%= ButtonFns.ClientID %>').click();        
return;
}   
SetCountdownText(_currentSeconds-1);
window.setTimeout("CountDownTick()", 1000);
}

C# 按钮点击:

protected void ButtonFns_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Examination.mdf;Integrated Security=True;User Instance=True");
    try
    {
        con.Open();
        string snm;
        string Em;
        string Sx;
        string uname = Session["status"].ToString();
        string qry = "SELECT SName,Email,Sex FROM Students WHERE Uname=@uname";
        SqlCommand cm = new SqlCommand(qry, con);
        cm.Parameters.AddWithValue("@uname", uname);
        SqlDataReader reader = cm.ExecuteReader();
        while (reader.Read())
        {
            snm = reader["SName"].ToString();
            Em = reader["Email"].ToString();
            Sx = reader["Sex"].ToString();
            if (snm != null && Em != null && Sx != null)
            {
                Session["snm"] = snm.ToString();
                Session["em"] = Em.ToString();
                Session["sx"] = Sx.ToString();
                Session["uname"] = uname;
                Session["RAns"] = LabelRitAns.Text;
                Session["Tatt"] = LabelTotAtt.Text;
                Server.Transfer("YourScore.aspx");
                break;
            }
        }

    }
    catch (Exception emsg)
    {
        LabelErr.Text= emsg.Message.ToString();
    }
    finally
    {
        con.Close();
    }

}

任何帮助将不胜感激..

【问题讨论】:

  • “它不工作”到底是什么意思?这里没有人会读心术。
  • @Abhishek ,请理解您的按钮是服务器端控件,因此您不能像以前那样调用代码隐藏方法。
  • Javascript 是否在浏览器中正确呈现?你有任何错误吗?您是否尝试过在 CountDownTick() 中设置断点?
  • 你在哪里减少_currentSeconds的值?

标签: c# javascript asp.net


【解决方案1】:

使用为 JavaScript 公开的 __doPostBack 方法。如果您传入按钮的 ID 和事件名称,它本质上会执行与用户单击按钮相同的回发到服务器。

ASP.NET postback with JavaScript (这使用了 VB 代码隐藏,但我认为你需要做的其他事情)

编辑:澄清一下,不要调用按钮的“点击”方法,而是使用 __doPostBack。

EDITx2:另外,请确保您的 OnClientClick 返回值为 true。如果它是假的,我认为它相当于说它无效并且不应该回发。

【讨论】:

    【解决方案2】:
    ButtonFns.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(ButtonFns, "Your postback argument"));
    

    GetPostBackEventReference 允许您获取那段 JavaScript, 这样您就可以从其他地方触发该回发。

    本文将帮助您解决此问题

    How to call Postback from Javascript

    【讨论】:

      【解决方案3】:

      您可以从客户端发出 POST 请求,首先将您的点击事件设置为:

      [WebMethods]
      public static void ClickEvent()
      {
      //do you stuff
      }
      

      现在从您的客户端进行 ajax 调用,让您的网页名称为 Default.aspx:

      $.ajax({
        type: "POST",
        url: "Default.aspx/ClickEvent",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
          // Do something interesting here.
        }
      });
      

      【讨论】:

        【解决方案4】:

        在你的情况下,你可以这样做,

            <script type="text/javascript">
        
            function ImitatePressButton() {
                    __doPostBack('ButtonFns', '');
            }
        </script>
        

        祝你好运。

        【讨论】:

          【解决方案5】:

          如果你想从 javascript 调用一个按钮,这里有另一种方法。

           var test = document.getElementbyId("YourButtonName");
          
           test.onclick = function() {
                  //your code
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-10-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多