POST JSON без модели и Ajax - PullRequest
       16

POST JSON без модели и Ajax

4 голосов
/ 23 ноября 2010

Сейчас я просто хочу использовать HTTP POST для отправки json на контроллер asp.net mvc2.

Поскольку JSON на самом деле представляет собой список объектов JSON, и каждый из них имеет разные поля и длину,поэтому мне трудно составить модель ввода.

Поэтому я хочу знать, есть ли способ опубликовать JSON без модели / ajax на контроллере в ASP.NET MVC2?

Ответы [ 2 ]

3 голосов
/ 23 ноября 2010

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

1 голос
/ 23 ноября 2010

Вы можете сохранить JSON в скрытом поле, а затем преобразовать JSON в объект в контроллере с помощью утилиты.Это должно быть в опубликованных данных формы для того, чтобы она была доступна;Хранение в скрытом поле - один из подходов, или используйте AJAX для потоковой передачи обратно.

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...