Я экспериментирую с вызовами Ajax. То, что я делаю, это передает список объектов для контроллера через вызов AJAX. Автоматическая модель привязки работает нормально, но то, что я пытаюсь сделать, это получить json String, вручную чтение от входного потока, но мое решение не работает. Спасибо.

$(document).ready(function () {

    var data = [{ Data1: "data1", Data2: 1, Data3: 41 },
    { Data1: "data2", Data2: 12, Data3: 42 },
    { Data1: "data3", Data2: 13, Data3: 43 }
    ];

    $("#PassList").click(function () {
        $.ajax({
            contentType: "application/json; charset=utf-8",
            dataType: 'html',
            type: 'POST',
            url: '/Home/PassList',
            data: JSON.stringify(data) ,
            success: function (data) {
                alert("Success passing List");
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert("failure");
            }
        });
    });
});

    [HttpPost]
    public ActionResult PassList(List<SampleData> SampleDatas, string NewData)
    {
        System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream);
        string line = "";
        line = sr.ReadToEnd();
        return View();
    }
0
user10426179 29 Сен 2019 в 23:00

1 ответ

Лучший ответ

Модель по умолчанию Binder работает правильно, потомуyou настроен:

contentType: "application/json; charset=utf-8", в вашем вызове Ajax.

Чтобы получить json String, вручную чтение от потока ввода, Прокомментируйте эти 2 строки в вашем AJAX:

// contentType: "application/json; charset=utf-8",
// dataType: 'html',

На стороне контроллера у вас будет:

public ActionResult PassList()
{
     System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream);
     string line = "";
     line = sr.ReadToEnd();
     return View();
}
0
A. Nadjar 30 Сен 2019 в 05:27