2012-05-28 20 views
1

關於MVC模型綁定有很多有用的信息。 我的問題源於這一事實,我試圖避免在我的MVC應用程序中創建強類型數據,因爲它大多數需要充當數據路由器。在jQuery和MVC控制器操作之間傳遞非結構化JSON

基本上,我在頁面上有一組字段,帶有一個類'輸入',我可以用jQuery('.input')收集,迭代並填充到JavaScript對象中。然後我送這個給我的ASP.NET MVC控制器:

var inputData = my_serialize($('input'); 
$.ajax({ 
    type:'POST', 
    url: '/acme/Ajax/CaptureInput', 
    dataType: "json", 
    data: { inputData: JSON.stringify(inputData) }, 
    success: Page_Response_RegisterAndDeposit, 
    error: Page_AjaxError 
}); 

在C#的一面,我有

public JsonResult CaptureInput(string inputDataAsJsonString) 
{ 
    JavaScriptSerializer JSON = new JavaScriptSerializer(); 
    object inputData = JSON.DeserializeObject(inputDataAsJsonString); 

這似乎是一個間接浪費的水平,我寧願傳遞數據作爲contentType:application/json並使CaptureInput接受objectIDictionary或甚至dynamic

+1

,爲什麼你把它作爲JSON發送? – LukLed

+0

因爲我最終希望使用相同的代碼發送更多結構化數據,其中包含遞歸定義的js對象。 JSON似乎比名稱 - 值對更適合。 –

+0

Related/dupe of:http://stackoverflow.com/questions/5473156/how-to-get-a-dynamically-created-json-data-set-in-mvc-3-controller http:// stackoverflow。 COM /問題/ 5022958 /通過動態-JSON對象到C-尖銳-MVC控制器 –

回答

0

不完全是你所追求的,但也許這個問題的解決方案將給你一個部分的解決方法,允許你綁定到一個簡單的包裝對象與嵌入式字典。它甚至可能允許直接綁定到Dictionary。不知道...... 您可能還需要明確設置JSON ContentType標頭在你的$就調用

"JSON model binding for IDictionary<> in ASP.NET MVC/WebAPI"

1

你可以使用serializeArray方法。讓我們假設你有一個包含這可以是任何類型的輸入元素的表單,你想調用以下控制措施:

public ActionResult CaptureInput(Dictionary<string, string> values) 
{ 
    ... 
} 

這裏是如何,你可以繼續:

<script type="text/javascript"> 
    var values = $('form').serializeArray(); 
    var data = {}; 
    $.each(values, function (index, value) { 
     data['[' + index + '].key'] = value.name; 
     data['[' + index + '].value'] = value.value; 
    }); 

    $.ajax({ 
     url: '@Url.Action("CaptureInput")', 
     type: 'POST', 
     contentType: 'application/json', 
     data: JSON.stringify(data), 
     success: function (result) { 
      alert('success'); 
     } 
    }); 
</script> 
相關問題