2010-09-28 51 views
0

我想使用jquery ajax函數發佈到MVC2控制器操作,但我的參數包括一個(簡單)自定義類的數組,該操作沒有正確獲取數據。幫助使用jQuery .ajax()方法將聚合數據傳遞給mvc2動作

客戶:

var element1 = { FirstName: 'Raymond', LastName: 'Burr' }; 
var element2 = { FirstName: 'Johnny', LastName: 'Five' }; 
var var2 = [element1, element2]; 
var var1 = 'some string';  
var parms = { 
    var1: var1, 
    var2: var2 
}; 
var ajaxArgs = { 
    type: "POST", 
    traditional: true, 
    url: "/Home/Test1", 
    data: parms, 
    dataType: "json", 
    success: returnSuccess, 
    error: returnError 
}; 

$.ajax(ajaxArgs); 

服務器:

[HttpPost]                 
public ActionResult Test1(string var1, List<TestParameterClass> var2) { ... } 

public class TestParameterClass    
{           
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

其中有2例已經工作: 1)使用列表< _string>作爲動作參數和改變JavaScript數組爲字符串 陣列。
2)使用TestParameterClass作爲動作參數並傳遞1個自定義類的實例。

所以真正的技巧似乎是獲得一個自定義類的數組傳遞成功,並與其他扁平(字符串)參數。

任何想法,使這項工作?還有沒有關於MVC2如何將參數轉換爲一些C#類型的任何文檔(我已經使用列表<>只有b/c它似乎是最廣泛使用的)?

謝謝!

回答

0

啊,Model Binder。當談到.NET MVC時,這麼多魔術的來源以及造成這麼多災難的原因。模型活頁夾是將參數轉化爲對象的東西,有時對於通過它的東西有點挑剔。

在這種特殊情況下,我想你想要的是形式傳遞參數

"people[0].FirstName": "Raymond", 
"people[0].LastName": "Burr", 
"people[1].FirstName": "Johnny", 
"people[1].LastName": "Five" 

基本上,如果你傳遞模型綁定集合類型,它想要的參數與命名數組樣式的索引(括號),然後是屬性名稱。至少這是對我有用的東西;我不是MVC忍者。

0

我會試着弄清楚,如果AJAX調用是錯誤的或者如果輸入模型綁定在服務器上是錯誤的。使用Firebug或Fiddler檢查AJAX調用,特別是POST數據。如果看起來正確,那麼問題可能在模型綁定中。

退房這個職位的一些名單解析的「文件」: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

另一件事是嘗試用一種形式創建一個示例頁面模仿這些數據你通過AJAX進入。此外,如果您可以將表單POST和模型綁定正確,那麼您的AJAX調用也可能會有效。