如何从asp.net中的js函数调用c#函数?

Posted

技术标签:

【中文标题】如何从asp.net中的js函数调用c#函数?【英文标题】:How to call c# function from js function inside asp.net? 【发布时间】:2017-08-14 03:28:47 【问题描述】:

我正在使用 asp.net 和 c# 开发我的第一个网站。 如何从 asp.net 中的 js 函数调用 c# 函数?我想将表单数据插入到 sql 数据库中。

C# (add_project.aspx.cs):

using System.Web.Services;
public partial class add_project : System.Web.UI.Page

[WebMethod]    
public static void InsertIntoDatabase(string projectname, string piname)
    
        Console.WriteLine("hello");// this doesn't appear which mean it doesn't enter this function
        SqlConnection conn = new SqlConnection("Data Source=servername;Initial Catalog=databasename;Integrated Security=SSPI");
        string sql = "INSERT INTO Projects (project_name, principal_investigator) VALUES (@project_name,@pi_name)";

        try
        
            conn.Open();
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlParameter[] param = new SqlParameter[2];
            param[0] = new SqlParameter("@project_name", System.Data.SqlDbType.VarChar, 50);
            param[1] = new SqlParameter("@principal_investigator", System.Data.SqlDbType.VarChar, 50);
        param[0].Value = projectname;
            param[1].Value = piname;
            for (int i = 0; i < param.Length; i++)
            
                cmd.Parameters.Add(param[i]);
            

            cmd.ExecuteNonQuery();
        
        catch (System.Data.SqlClient.SqlException ex)
        
            string msg = "Insert Error:";
            msg += ex.Message;
            throw new Exception(msg);
        
        finally
        
            conn.Close();
        

    

aspx 文件 (add_project.aspx) 中的js:

<script>
  function doSomething() 

      var $projectname = $("#project_name").val();
      var $piname = $("#pi_name").val();
      alert($piname);    // This alert appear
      $.ajax(
          type: "POST",
          url: 'add_project.aspx/InsertIntoDatabase',
          data: "'projectname':'" + $projectname + "', 'piname':'" + $piname + "' ", //Pass the parameter names and values
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          success: function (msg) 
              alert('success');
          ,
          error: function (e) 
              alert('error');       // this msg appear
          
      );
         

aspx 文件 (add_project.aspx) 中的表单:

    <form class="form-horizontal form-label-left" id="add_project_form" runat="server" onsubmit="doSomething();">
    <div id="wizard" class="form_wizard wizard_horizontal">
<!-- Project Name -->
                          <div class="form-group">
                            <label class="control-label col-md-3 col-sm-3 col-xs-12" for="project_name">Project Name <span class="required">*</span>
                            </label>
                            <div class="col-md-6 col-sm-6 col-xs-12">
                              <asp:TextBox id="project_name" required="required" class="form-control col-md-7 col-xs-12" runat="server"></asp:TextBox>
                            </div>
                          </div>
<!-- PI name -->
                          <div class="form-group">
                            <label class="control-label col-md-3 col-sm-3 col-xs-12" for="pi_name">PI Name <span class="required">*</span>
                            </label>
                            <div class="col-md-6 col-sm-6 col-xs-12">
                              <asp:TextBox id="pi_name" required="required" class="form-control col-md-7 col-xs-12" runat="server"></asp:TextBox>
                            </div>
                          </div>
    </div>
</form>

我无法访问表单的提交按钮(因为我使用引导模板)。

谢谢

解决方案: 我通过将 [WebMethod] 放在 c# 函数之前来解决问题 另外,我在插入语句中有错误语法。 感谢@Pawan 和所有人的帮助。

【问题讨论】:

url中删除.cs扩展 我试过了,还是不行 您可以在您的方法上使用 [WebMethod] 属性从客户端访问它 您遇到了什么具体错误? 推荐***.com/questions/7262940/webmethod-not-being-called 【参考方案1】:

c# 方法应该是 webmethod。

[WebMethod]

这是你的 c# 方法

您需要先将system.web.services 导入到您的代码中,

using System.Web.Services;

并将js函数写入表单提交事件(如果您无法访问提交按钮)

在表单中写onsubmit="yourfun()" inline

或者如果你正在使用 jquery

$("#form-id").submit(function()

    your function;

);

【讨论】:

我已经写过了
你能在你的c#代码中放一个调试器,检查它是否命中后端..?

以上是关于如何从asp.net中的js函数调用c#函数?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET前后台互相访问

如何从 javascript 文件中获取函数的值到 ASP.NET MVC 视图?

将 DLL 引用添加到 C# asp.net 项目后如何调用函数

单击 HTML 链接时在 ASP.NET 中调用 C# 函数

如何从 .cs 文件 (C#) 调用 JavaScript/jQuery 函数

如何在 Node.js 中从客户端(例如 html 按钮 onclick)调用服务器端函数?