Как просто вывести сериализованную форму обратно в виде данных в виде AJAX в ASP.NET MVC3 - PullRequest
2 голосов
/ 21 сентября 2011

Отказ от ответственности: я полный нуб, когда дело доходит до ASP.NET.

Я использую следующий код jQuery для отправки моей формы:

            $.ajax({
                url: '/Foo/Save',
                type: 'POST',
                data: $('#dataInputForm').serialize(),
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    alert(data.success);
                },
                error: function () {
                    alert("error");
                }
            });

Мой Foo контроллеркод такой:

    [HttpPost]
    public ActionResult Save()
    {
        return Json(new { success = true });
    }

Я знаю, что сообщение AJAX работает, потому что я вижу предупреждение с «успехом».Далее, я хотел бы увидеть дамп var моей сериализованной формы.Честно говоря, я не знаю, с чего начать на стороне контроллера, но я хотел бы, чтобы мое предупреждение об успехе просто дамп моих сериализованных данных формы просто так, чтобы я мог подтвердить, что данные формы, которые были отправлены.

По сути, этокак бы я хотел, чтобы предупреждение об успехе выглядело так:

a=1&b=2&c=3&d=4&e=5

БОНУС: Мне бы очень хотелось увидеть альтернативный способ отправки данных в JSON и увидеть предупреждение об успехе в JSON.

Ответы [ 2 ]

4 голосов
/ 21 сентября 2011

во-первых, .serialize () не создает json, поэтому указанный contentType неверен.вы можете отбросить опцию contentType, и $ .ajax () будет использовать по умолчанию 'application / x-www-form-urlencoded'.

далее, на контроллере вам необходимо привязать опубликованные данные к некоторому объекту,если у вас нет определенного объекта, который моделирует данные вашей формы, вы можете использовать FormCollection для построения вашего результата:

[HttpPost]
public ActionResult Save(FormCollection collection)
{
    var result = new {Foo1 = collection["Foo1"], Foo2 = collection["Foo2"]};

    return Json(result);
}

в вашем обработчике успеха, затем вы можете отобразить свойства:

success: function(data) {
    alert(data.Foo1);
    alert(data.Foo2);
}

или преобразовать объект в строку json, используя эту утилиту, например, так:

success: function(data) {
    alert(JSON.stringify(data));
}

для дальнейшего использования:

преобразовать объект jsonв строку

0 голосов
/ 21 сентября 2011

Возможно, вам придется изменить сигнатуру метода так, чтобы он имел время потока.Затем вам нужно будет проанализировать поток как строку и разделить аргументы на & (амперсанды), где у вас будут разные KVP.

public Stream samplePost(Stream stream)
    {
        WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
        StreamReader sr = new StreamReader(stream);
        string stringStream = sr.ReadToEnd();
        sr.Dispose();
        NameValueCollection kvp = HttpUtility.ParseQueryString(stringStream);
        var number1 = Convert.ToInt32(kvp["number1"]);
        var number2 = Convert.ToInt32(kvp["number2"]);
        var sum = number1 + number2;

        byte[] byteArray = Encoding.ASCII.GetBytes("SUM IS " + sum.ToString());
        MemoryStream s = new MemoryStream(byteArray);
        return s;
    }

Это пример взятия двух чисел и их возвратакак сумма.Я думаю, что это должно помочь вам.

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