2013-10-29 35 views
2

如何執行AJAX調用MVCController需要dynamicobject動態對象和AJAX調用mvc

這是我嘗試:

public JsonResult Test(dynamic someObject) 
{ 
    return; 
} 


$.ajax({ 
    type: 'GET', 
    url: '/home/test', 
    data: JSON.stringify({ test: 1, test2: 2 }), 
    contentType: 'application/json', 

    success: function (data) { 
     alert(data); 
    }, 
    error: function (error, data) { 
     alert("something went wrong: " + error); 
    } 
}); 

但我得到的只是{}對象在someObject值。

+2

我不相信MVC模型粘合劑可與動態對象綁定被發現。 – CAbbott

+0

那麼還有另一種方法嗎? – Quoter

回答

2

這是不可能的,因爲MVC不能反序列化它不知道類型的對象。

我建議將數據作爲JSON字符串傳遞,然後對其進行反序列化。

public JsonResult Test(string someObject) 
{ 
    dynamic y = new JavaScriptSerializer().Deserialize<dynamic>(someObject); 
    return; 
} 

JavaScriptSerializer可以在System.Web.Extensions程序

+1

+1 - 然而(這是OP的問題,而不是你的答案),通過使用動態,你可能會在可維護性方面做你自己的解體。如果你期望在該actionmethod中各種不同的類對象被去序列化,那麼我建議使用一個通用接口來對付你期望*的反序列化類 –

+0

@drizzie,我不應該假冒一個視圖模型來代替使用'string'? 'someobject'始終爲空。 – Quoter

+0

如果它始終爲空,則說明您的AJAX調用有些不正確。如果您使用ViewModel,那麼您使用的是強類型類,這消除了將JavaScriptSerialier和動態對象放在一起使用的需要。這就是@ jimtollan在他的評論中所說的話。使用ViewModel絕對更好。 – drizzie