我正在尝试将对象数组从前端 javascript 发送到我的 asp.net Web 表单中的方法。错误:https://localhost:44396/Input.aspx/UpdateData

问题描述 投票:0回答:1

我有三个输入,应用程序名称、起始日期和截止日期。我将它们添加到创建对象数组的表中。然后尝试使用 ajax 将此数组发送到 Web 表单中的 aspx.cs 文件中的方法。但我得到了错误。

Javascript代码:

document.addEventListener("DOMContentLoaded", function()
  {
  console.log("DOMContentLoaded event fired");
  var updateBtnClick = document.getElementById("<%= updateBtn.ClientID %>");
  //"ContentPlaceHolder1_updateBtn" 
  if (updateBtnClick) 
    {
    console.log("Update button element found");
    updateBtnClick.addEventListener('click', function(e) 
      {
      e.preventDefault();
      console.log("Update button is clicked");
      var jsonData = JSON.stringify(tableData);
      console.log(jsonData);
      $.ajax(
        { url         : "Input.aspx/UpdateData"
        , type        : "POST"
        , data        : jsonData
        , contentType : "application/json"
        , success     : function(response) 
          {
          console.log("Data sent to the backend successfully");
          }
        , error       : function(error) 
          {
          console.error("Error sending data to the backend: "+JSON.stringify(error));
          }
        });
      });
    } 
  else 
    {
    console.log("Update button element not found");
    }
  });

aspx.cs:

[WebMethod] public static string UpdateData(List<Downtime> jsonData)
  {
  if (jsonData != null && jsonData.Count > 0) 
    { 
    string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connectionString)) 
      { 
      conn.Open(); 
      foreach (var item in jsonData) 
        { 
        string   dropdownValue = item.App_name; 
        DateTime fromDate      = item.From_date; 
        DateTime toDate        = item.To_date; 
        string   sqlQuery      = "UPDATE DowntimeApplications SET From_date = @FromDate, To_date = @ToDate where App_name = @name"; 
        using (SqlCommand command = new SqlCommand(sqlQuery, conn)) 
          { 
          command.Parameters.AddWithValue("@FromDate", fromDate); 
          command.Parameters.AddWithValue("@ToDate", toDate); 
          command.Parameters.AddWithValue("@name", dropdownValue); 
          command.ExecuteNonQuery(); 
          } 
        } 
      HttpContext.Current.Response.ContentType = "application/json"; 
      var response = new { success = true, message = "Data updated successfully" }; 
      return JsonConvert.SerializeObject(response); 
      } 
    } 
  var noDataResponse = new { success = false, message = "No data to update" }; 
  HttpContext.Current.Response.ContentType = "application/json"; 
  return JsonConvert.SerializeObject(noDataResponse); 
  }
javascript asp.net .net webforms asp.net-ajax
1个回答
0
投票
[WebMethod] public static string UpdateData(List<Downtime> jsonData)

webmethod参数名为

jsonData
,所以需要用这个key来传递对象。

以下代码应该可以工作:

        var jsonData = {};//jsonData matches the parameter name of the webmethod
        jsonData["jsonData"] = tableData; 

        var payload = JSON.stringify(jsonData);

        $.ajax(
            {
                url: "Input.aspx/UpdateData"
                , type: "POST"
                , data: payload
                , contentType: "application/json"
                , success: function (response) {
                    console.log("Data sent to the backend successfully");
                }
                , error: function (error) {
                    console.error("Error sending data to the backend: " + JSON.stringify(error));
                }
            });
© www.soinside.com 2019 - 2024. All rights reserved.