Опираясь на ответ @ Брайана, мы сделали именно это.Имейте в виду, что это 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();
}
Далее у нас есть форма ajax со скрытым полем внутри, в которую doStuff () помещает наши данные.Это также может быть обычная старая форма.
<% 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), и фактически не видя, как эти данные выглядят, я вполне уверен, что вы могли бы разработать какую-то структуру классов для поддержки ваших данных.