2010-11-23 35 views
4

現在,我只想使用HTTP POST將json發送到asp.net mvc2控制器。POST Json無模型和Ajax

由於JSON實際上是JSON對象的列表,並且它們每個都有不同的字段長度,所以我很難組成輸入模型。

所以我想知道有沒有辦法讓我將JSON發佈到模型/ ajax到ASP.NET MVC2中的控制器?

回答

3

建立在@布賴恩的答案,我們已經完成了這一點。請記住,這是JQuery 1.4.2

這是有點突出,可以簡化,但它是使用回調,而不是完整的職位。它最初用於實時過濾結果,並將其第一頁重新加載到同一區域。

首先,我們在頁面上有按鈕/鏈接/任何東西。這將會調用javascript來構建json數據。

<input type="button" alt="Update" onclick="doStuff();" /> 

然後,我們有doStuff()函數。在這種情況下,優化是json對象的集合。

function doStuff() { 

     var refinements = GetRefinementSelections(); 
     var profileId = '<%= Model.Profile.ProfileId %>'; 

     var startDate = $('#SearchbyDateFrom').val(); 
     var endDate = $('#SearchbyDateTo').val(); 

     var jsonData = JSON.stringify(
      { 
       "ProfileId" : profileId, 
       "RefinementGroups": refinements, 
       "StartDate": startDate, 
       "EndDate": endDate 
      }); 

      $('#jsonData').val(jsonData); 
      $('#update-button').click(); 
    } 

接下來,我們必須與doStuff裏面的隱藏字段(),把我們的數據轉換成Ajax表單。這也可能是一種常規的舊形式。

<% using (Ajax.BeginForm("MyAction", "MyController", new { }, 
     new AjaxOptions { }, 
     new { id = "filteredResultsForm" })) 
    { %> 
    <input type="submit" id="update-button" style="display:none;" /> 
    <%= Html.Hidden("jsonData")%> 
<% } %> 

因此,點擊被調用這個按鈕,這導致回調到服務器。這是我們在控制器中的操作。 JsonSerializer是Newtonsoft.Json

public ActionResult MyAction(string jsonData) 
    { 
     JsonSerializer serializer = new JsonSerializer(); 

     StringReader sr = new StringReader(jsonData); 
     Newtonsoft.Json.JsonTextReader reader = new JsonTextReader(sr); 

     JsonRequest jsonRequest = (JsonRequest)serializer.Deserialize(reader, typeof(JsonRequest)); 

     //do work with object 

     return View(); 
    } 

JsonRequest需要一個類的對象,並且所有屬性,子類和它們的屬性,等等等等需要被序列這種方法工作的一部分。儘管有一組流數據被返回(作爲json對象的集合),但實際上並沒有看到數據是什麼樣的,我相當肯定你可以設計某種類結構來支持你的數據。

1

您可以將JSON存儲在隱藏字段中,然後使用實用程序將JSON轉換爲控制器中的對象。它必須位於表單的發佈數據中才能使用;存儲在隱藏字段是一種方法,或使用AJAX將其流式傳回。

HTH。