我正在开发一个 ASP.NET MVC 4 网站,但在功能方面遇到了一些问题。我解释一下,我必须选择表格中显示的实体及其链接的复选框:
Screenshot of my table where each row has a checkbox with the same Id as the entity
Console showing updates in the array
在我的脚本中,我能够将每个选中的 Id 复选框存储在一个数组中,并在未选中该复选框时删除这些复选框。但我无法将数组传递给 Controller 的函数来删除数据库中的每个选定实体。
我使用 jquery 中的 $.ajax()
通过 POST 请求发送数组(作为 JSON),但我总是收到 500 错误:
- JSON 基元无效
- 空引用
这是我的脚本中的函数(我不知道我的数组格式是否有效):
var sendDocsToDelete = function (docsArray) {
$.ajax({
type: 'POST',
url: 'Main/DeleteDocuments',
data: JSON.stringify(docsArray),
contentType: 'application/json; charset=utf-8',
datatype: 'json',
success: function (result) {
alert('Success ' + result.d);
},
error: function (result) {
alert('Fail ' + result.d);
}
});
}
然后,POST 在我的 Controller 中调用以下函数:
[Authorize]
[WebMethod]
public void DeleteDocuments(string docsToDelete)
{
int id;
string[] arrayDocs = JsonConvert.DeserializeObject<string[]>(docsToDelete);
foreach (string docId in arrayDocs)
{
int.TryParse(docId, out id);
dal.DeleteDocument(id); // dal = DataAccessLayer is the class which interacts with the database by executing queries (select, delete, update...)
}
}
更新2
[Authorize]
public ActionResult DeleteDocuments(int[] docsToDelete)
{
try{
foreach (string docId in arrayDocs)
{
int.TryParse(docId, out id);
dal.DeleteDocument(id); // dal = DataAccessLayer is the class which interacts with the database by executing queries (select, delete, update...)
}
return Json("Success");
}
catch
{
return Json("Error");
}
}
var sendDocsToDelete = function (docsArray) {
$.ajax({
type: 'POST',
url: 'Main/DeleteDocuments',
data: docsArray,
contentType: 'application/json; charset=utf-8',
datatype: 'json',
success: function (result) {
alert('Success ' + result.d);
},
error: function (result) {
alert('Fail ' + result.d);
}
});
}
关于这个问题有什么想法吗?我希望我说得足够清楚。如果您需要更多详细信息,请不要犹豫。
最佳答案
如果您从 $.ajax
正确传递整数数组(即您的 docsArray
应该具有类似于 [15,18,25,30, 42,49]
)那么你应该尝试:
[Authorize]
public ActionResult DeleteDocuments(int[] docsArray)
{
//int id;
//string[] arrayDocs = JsonConvert.DeserializeObject<string[]>(docsToDelete);
try {
foreach (int docId in docsArray)
{
//int.TryParse(docId, out id);
dal.DeleteDocument(docId); // dal = DataAccessLayer is the class which interacts with the database by executing queries (select, delete, update...)
}
return "Success ";
}
catch {
return "Error";
}
}
更新:
您的 JavaScript 代码应该是:
var sendDocsToDelete = function (docsArray) {
$.ajax({
type: 'POST',
url: 'Main/DeleteDocuments',
data: JSON.stringify(docsArray),
contentType: 'application/json; charset=utf-8',
datatype: 'json',
success: function (result) {
alert('Success ');
},
error: function (result) {
alert('Fail ');
}
});
}
关于javascript - 将数组作为参数从 JavaScript 中的 ajax 调用传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37325323/