我已经成功地使用相对复杂的参数集(使用 jQuery.ajax 调用)进行 AJAX 调用的 WebForms。我们正在尝试在 MVC 3 中使用相同的方法,但似乎遇到了第一个障碍,因为 MVC 未能成功反序列化字典数组。
在 ASP.NET WebForms“经典”中没有问题的方法如下:
[WebMethod]
public static JQGrid.JQGridData GetListForJQGrid(int? iPageSize, int? iPage, int? iMaxRecords, string sSortField, string sSortOrder,
Dictionary<string, string> dSearchOptions, Dictionary<string, object>[] aOriginalColumnDefinition, string[] aExtraDataColumns)
下面是 MVC 3 等效项:(注意名称/参数完全相同 - 不同的返回类型,但我认为这不相关)
[HttpPost]
public JSONResult GetListForJQGrid(int? iPageSize, int? iPage, int? iMaxRecords, string sSortField, string sSortOrder,
Dictionary<string, string> dSearchOptions, Dictionary<string, object>[] aOriginalColumnDefinition, string[] aExtraDataColumns)
使用 WebMethod 可以完美地反序列化所有数据。但是,当调用 MVC 方法时,所有简单参数都可以很好地反序列化,但由于某些未知原因,Dictionary 的数组作为空数组到达。
那么,抛开这些问题:
- 还有其他人遇到过字典数组的 MVC 3 反序列化问题吗?
- 默认情况下 MVC 3 是否不使用 System.Web.Script.Serialization.JavaScriptSerializer,我认为这是 ASP.NET WebMethods 在引擎盖下使用的东西?
- 我可以强制 MVC 3 使用 System.Web.Script.Serialization.JavaScriptSerializer 而不是它正在使用的东西吗?
- 或者我错过了什么/我的方法应该略有不同吗?请注意,至少现在我们需要在经典 ASP.NET WebMethods 和 MVC 3 之间共享客户端代码,因此我们希望尽可能保持原样。
- 最后,我发现有一个可能的解决方法可以用来解决这个问题:POST json dictionary .这个变通办法是镇上唯一的游戏还是自提出这个问题后情况有所改善?
jQuery AJAX 调用:
$.ajax(_oJQGProperties.sURL, //URL of WebService/PageMethod used
{
data: JSON.stringify(oPostData),
type: "POST",
contentType: "application/json",
complete: DataCallback
});
示例 JSON.stringify(oPostData):
{
"dSearchOptions":{},
"aOriginalColumnDefinition":
[
{"name":"ID","sortable":false,"hidedlg":true,"align":"right","title":false,"width":40},
{"name":"URL","sortable":false,"hidedlg":true,"align":"left","title":false,"width":250,"link":"javascript:DoSummat(this,'{0}');","textfield":"Name"},
{"name":"Description","sortable":false,"hidedlg":true,"align":"left","title":false,"width":620}
],
"aExtraDataColumns":["Name"],
"_search":false,
"iPageSize":-1,
"iPage":1,
"sSortField":"",
"sSortOrder":"",
"iMaxRecords":0
}
最佳答案
我没有任何绑定(bind)到字典数组的经验,但一种可能的解决方案是使用自定义模型绑定(bind)器。 Scott Hanselman 有一篇关于此主题的博客文章,您可能会发现它很有用:Splitting DateTime - Unit Testing ASP.NET MVC Custom Model。
关于ajax - 在 MVC 3 中为 AJAX 请求反序列化字典时出现问题(一种开箱即用的经典 ASP.NET Webforms 方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6881440/