【发布时间】:2015-07-30 10:14:39
【问题描述】:
我有一个 ASP.NET MVC 4 应用程序。 我有一个带有 Kendo.Grid 的视图,我想用 ajax (JSON.stringify) 发送控制器上的网格数据。
我的问题是我的控制器收到一个字符串列表,我不知道如何反序列化 Json 数据。
代码
这是包含在网格行中的对象:
public class CourseDto
{
public string CodCourse { get; set; }
public string DesCourse { get; set; }
}
这是我的视图中网格的定义:
@(Html.Kendo().Grid<CourseDto>()
.Name("GridCourses")
.Columns(columns =>
{
columns.Bound(c => c.CodCourse);
columns.Bound(c => c.DesCourse);
})
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Read("GetAllCourses", "ControllerCourses")
)
)
这是使用 jquery 对控制器的 ajax 调用:
function passTheGrid() {
$.ajax({
url: "@Url.Action("ShowCourses")",
type: "POST",
data: {
courses : JSON.stringify($("#GridCourses").data("kendoGrid").dataSource.data());
},
success: function (response) {
$("#coursesDiv").html(response);
}
});
}
这是控制器:
[HttpPost]
public PartialViewResult ShowCourses(List<string> courses)
{
JavaScriptSerializer js = new JavaScriptSerializer();
List<string> temp= new List<string>();
foreach (var singleCourse in courses)
{
temp.Add(js.Deserialize<string>(singleCourse));
}
...
return PartialView("_viewCourses");
}
在我的示例中,我在网格中只有一个课程,当我在控制器上使用 ajax 传递数据时,参数“课程”包含此字符串:
[{"CodCourse":"PRIVSIC0102006","DesCourse":"MULTIMEDIA - PRIVACY AND SECURITY"}]
但是当我尝试反序列化时出现此错误:
矩阵的反序列化不支持类型“System.String”
问题
如何正确反序列化控制器中的 JSON 数据?
【问题讨论】:
-
首先将json反序列化为你的模型CourseDto,然后重写CourseDto ToString方法,调用ToString()。
-
@Oğuzhan Soykan 我尝试在我的模型“CourseDto”中直接反序列化,但反序列化给我错误:“CourseDto 不支持矩阵的反序列化。”
标签: jquery json asp.net-mvc kendo-grid kendo-asp.net-mvc