現在,我只想使用HTTP POST將json發送到asp.net mvc2控制器。POST Json無模型和Ajax
由於JSON實際上是JSON對象的列表,並且它們每個都有不同的字段長度,所以我很難組成輸入模型。
所以我想知道有沒有辦法讓我將JSON發佈到模型/ ajax到ASP.NET MVC2中的控制器?
現在,我只想使用HTTP POST將json發送到asp.net mvc2控制器。POST Json無模型和Ajax
由於JSON實際上是JSON對象的列表,並且它們每個都有不同的字段長度,所以我很難組成輸入模型。
所以我想知道有沒有辦法讓我將JSON發佈到模型/ ajax到ASP.NET MVC2中的控制器?
建立在@布賴恩的答案,我們已經完成了這一點。請記住,這是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對象的集合),但實際上並沒有看到數據是什麼樣的,我相當肯定你可以設計某種類結構來支持你的數據。
您可以將JSON存儲在隱藏字段中,然後使用實用程序將JSON轉換爲控制器中的對象。它必須位於表單的發佈數據中才能使用;存儲在隱藏字段是一種方法,或使用AJAX將其流式傳回。
HTH。