我在ASP.NET MVC 4视图中显示多条记录,其中每条记录都有一个复选框。我希望用户能够选择多个记录(通过选中复选框)并单击“删除”按钮以删除它们。到目前为止,我可以通过jquery ajax调用Delete Action方法,但问题是我的action方法似乎不接受传递的数组。 这是我的jquery代码:
$(function () {
$.ajaxSetup({ cache: false });
$("#btnDelete").click(function () {
$("#ServicesForm").submit();
});
$("#ServicesForm").submit(function () {
var servicesCheckboxes = new Array();
$("input:checked").each(function () {
//console.log($(this).val()); //works fine
servicesCheckboxes.push($(this).val());
});
$.ajax({
url: this.action,
type: this.method,
data: servicesCheckboxes,
success: function (result) {
if (result.success) {
}
else {
}
}
});
return false;
});
});
这是我的行动方法:
[HttpPost]
public ActionResult DeleteServices(int[] deleteservice)
{
if (deleteservice != null)
{
//no hit
}
}
我错过了什么?
修改
我还在console.log(servicesCheckboxes);
之前尝试了$.ajax()
,["3", "4"]
输出data: { deleteservice: servicesCheckboxes }
但在我按照下面data: [1,2]
的答案中指定的方式传递数据时仍然为空。即使我尝试了deleteservice
,但操作方法中的{{1}}操作方法仍显示为null。
答案 0 :(得分:3)
只需将数组传递给您的操作:
$.ajax({
url: this.action,
type: this.method,
dataType: "json"
data: { deleteservice: servicesCheckboxes }, // using the parameter name
success: function (result) {
if (result.success) {
}
else {
}
}
});
或者,只需使用serialize()
jquery方法序列化表单中的所有字段:
$.ajax({
url: this.action,
type: this.method,
dataType: "json"
data: $(this).serialize(),
success: function (result) {
if (result.success) {
}
else {
}
}
});
在您的控制器中:
[HttpPost]
public ActionResult DeleteServices(int[] deleteservice)
{
bool deleted = false;
if (deleteservice != null)
{
// process delete
deleted = true;
}
return Json(new { success = deleted });
}
答案 1 :(得分:0)
终于搞定了。 “MVC按照here的说明检测到contentType
”接收的数据类型,因此我对$.ajax()
进行了以下更改
$.ajax({
url: this.action,
type: this.method,
dataType: "json"
//data: { deleteservice: servicesCheckboxes }, // using the parameter name
data: JSON.stringify({ deleteservice: servicesCheckboxes }),
contentType: 'application/json; charset=utf-8',
success: function (result) {
if (result.success) {
}
else {
}
}
});