我已經成功地被用於的WebForms與AJAX相對複雜的參數設置(使用jQuery.ajax調用)調用(可以算出與經典的ASP.NET Web表單盒的方法) 。我們試圖嘗試在MVC 3中使用相同的方法,但似乎在MVC未能成功反序列化Dictionary數組時遇到了第一個障礙。問題MVC 3反序列化Dictionarys爲AJAX請求
,如果沒有問題,在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相當於:(NB完全相同的名稱/參數 - 不同的返回類型,但我不認爲這是相關的)
[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
}
謝謝Brian - 我會研究這個... –