我有三个输入,应用程序名称、起始日期和截止日期。我将它们添加到创建对象数组的表中。然后尝试使用 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);
}
[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));
}
});