2011-08-19 80 views
2

我已經閱讀了相當多的博客和stackoverflow的答案如何發送一個JavaScript對象到asp.net MVC控制器。但到目前爲止,我看到的所有示例都需要您瞭解JavaScript對象的哪些屬性(因爲它們都將JavaScript對象轉換爲C#對象)。發送具有未知屬性的JavaScript對象到asp.net MVC控制器

當我在asp.net webforms中使用PageMethods時,我可以發送任何複雜的JavaScript對象或數組(甚至是層次數據),並將其轉換爲我可以迭代的字典。任何機會我可以在asp.net MVC中做類似的事情嗎?

回答

1

我現在發現這對我的作品的一種方式。

  1. 我正在將我的數據轉換爲json並將其作爲字符串接收到我的ASP.net MVC控制器中。
  2. 然後我使用json.net庫來讀取數據 - 因爲此庫允許我讀取數據而不將其轉換爲C#(或VB)對象。

JavaScript代碼:

//first include the json2 library for older browsers and jQuery 
$.post(url, {json: JSON.stringify(mydata)}); 

服務器端代碼:

public void xyz(string json) 
{ 
    JObject j = JObject.Parse(json); 
    string name = (string)j.SelectToken("Products[0].Name"); 
    //... 
} 

的好處:它是 「正常」 的JSON,這意味着它是不是有些不常見的格式或接口類型。

編輯:我發現,如果我正在使用,我甚至不需要C#json庫。淨4 - 因爲我可以在JavaScriptSerializer的幫助下將任何json字符串轉換爲字典:

JavaScriptSerializer jss = new JavaScriptSerializer(); 
Dictionary<string, object> data = (Dictionary<string, object>) jss.Deserialize<dynamic>(json_string); 
0

這將被轉換爲一個字典:

[{"key":0, "value":"something"},{"key":2, "value":"something else"},] 

很明顯,你可以做字符串,字符串或整型,布爾或等..

例如,我有這樣的方法:

public int CollabSortFolder(int FolderId, Dictionary<int, int> Items) 

我會使用GET撥打:

/CollabSortFolder?FolderId=111111&Items=[{"Key":3685,"Value":0},{"Key":3670,"Value":1},{"Key":3687,"Value":2}] 

現在作爲一個GET它不是很優雅,但一個職位會以同樣的方式工作。

+1

不幸的是,它不在我的例子中工作 - 我的參數始終爲空。你能告訴我服務器端控制器的動作是怎麼樣的。 (該參數?) – Preli

+1

它仍然不是爲我工作(甚至你的示例代碼)。項目始終爲空或只是空的。我不知道我做錯了什麼。我使用asp.net MVC 3 – Preli

0

你可以做的是使用jQuery插件toDictionary,這個插件將改變你的對象是ASP.NET MVC字典默認模式粘結劑可以理解

例如

$.ajax({ 
    url: "/SomeURL", 
    type: "POST", 
    data: $.toDictionary(dataToSend) 
    }); 

記住dataToSend是你的對象

+0

連結此http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html –

+0

看起來有希望的 - 但我不知道如果它提供了我所需要的,因爲我無法實現它的工作。我不知道mvc控制器中的參數使用什麼類型。在博客例子他只顯示其與「預定義的類」(Person和汽車),但我沒有這樣的服務器端類,因爲我不知道的JavaScript對象都將有哪些屬性做。 – Preli

0

您是否嘗試過使用Request.Forms字典?

public ActionResult MyAction(FormCollection formValues) 
{ 
} 

遍歷formValues

+0

是的,我試過了。但是,當我擁有分層數據(我有)時,我感到非常不方便。因爲一切都將是一個平面清單。 – Preli

相關問題