kendo 网格发送 json 到控制器
kendo grid send json to controller
当我删除一行时,我正在从 kendo 网格发送一个 json,但在控制器中我收到空值。
$(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 ok,在请求有效负载中,我查看了 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);
}
您正在发送一个字符串并假装它是 JSON(请参阅您的 contentType
和 data
)。如果您将其更改为 text/plain
.
之类的内容,它可能会起作用
但你甚至不应该尝试这个!您应该在 C# 中创建一个 PatientModel
,它具有 FirstName
、LastName
等属性,并在您的控制器方法中期望这个模型。这样您就不必自己序列化和反序列化数据。考虑到您已经有一个动作 GetPatients
,我猜您已经有了那个模型。使用它。
当我删除一行时,我正在从 kendo 网格发送一个 json,但在控制器中我收到空值。
$(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 ok,在请求有效负载中,我查看了 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);
}
您正在发送一个字符串并假装它是 JSON(请参阅您的 contentType
和 data
)。如果您将其更改为 text/plain
.
但你甚至不应该尝试这个!您应该在 C# 中创建一个 PatientModel
,它具有 FirstName
、LastName
等属性,并在您的控制器方法中期望这个模型。这样您就不必自己序列化和反序列化数据。考虑到您已经有一个动作 GetPatients
,我猜您已经有了那个模型。使用它。