当我删除一行时,我正在从kendo网格发送一个json,但是在控制器中,我会收到null。
$(document).ready(function () {
$("#grid").kendoGrid({
dataSource: {
type: "json",
transport: {
read: {
type: "POST",
dataType: "json",
url: "/Home/GetPatients"
},
destroy: {
url: '@Url.Action("deletePatient", "Home")',
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json"
},
parameterMap: function (options, operation) {
if (operation !== "read" && options)
return kendo.stringify(options);
}
},
schema: {
model: {
id: "Id",
fields: {
FirstName: { type: "string" },
LastName: { type: "string" },
CNP: { type: "string" },
Birthdate: { type: "date" }
}
}
},
pageSize: 20,
},
height: 300,
sortable: true,
pageable: {
refresh: true,
pageSizes: true,
buttonCount: 5
},
toolbar: ["create"],
columns:
[
{ field: "LastName", title: "Nume" },
{ field: "FirstName", title: "Prenume" },
{ field: "CNP", title: "CNP" },
{ field: "Birthdate", title: "Data nasterii", format: "{0:dd/MM/yyyy}" },
{
command:
[
{
name: "edit"
},
{
name: "destroy",
}
],
title: "", width: "172px"
}
],
editable: "popup"
});
});
我在这里将debug放在方法中,并且实际参数'j'为null,它应该是一个字符串(序列化json)。 在chrome->调试模式->网络->我的状态为200,在请求有效负载中,我查看了所有行数据的json,这是可以的,但我被卡住了。
[HttpPost]
public ActionResult deletePatient(string j)
{
//List<Patient> objName = new JavaScriptSerializer().Deserialize<List<Patient>>(j);
int a = 5;
a = a - 4;
return Json(a);
}
答案 0 :(得分:2)
您正在发送一个字符串,并假装它是JSON(请参见class HPIQuestionBank(models.Model):
label = models.CharField(
max_length=200,
db_index=True,
blank=True,
null=True)
template = models.ForeignKey(
HPIFilter, blank=True, null=True, on_delete=models.CASCADE, default='')
organization = models.IntegerField(blank=True, null=True)
和contentType
)。如果您将其更改为data
之类,它可能会起作用。
但是您甚至都不应该尝试这个!您应该在C#中创建一个具有text/plain
,PatientModel
等属性的FirstName
,并在控制器方法中使用这种模型。这样,您不必自己对数据进行序列化和反序列化。考虑到您已经有一个动作LastName
,我想您已经有了该模型。使用它。