Передача сложной модели в контроллер с использованием AJAX в ASP. NET Core MVC - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь передать модель из представления в контроллер, используя AJAX, вызов AJAX работает с жестко запрограммированной строкой JSON, но не работает с фактическим JSON, и я не знаю почему, любая помощь очень ценится. Шаг за шагом вот что я сделал:

В представлении у меня есть

  <script>
    var FeedData = @Html.Raw(Json.Serialize(Model));
</script>

В моем JavaScript файле

    var index= $(this).val();

    var test = window.FeedData[index];

    var json = {
        prop1: 'test',
        prop2: 'test2',
    };

    var data = {
        json: JSON.stringify(json)
    };

    var data2 = {
        json: JSON.stringify(test)
    };

    $.ajax({
        type: 'GET',
        dataType: 'json',
        url: "/Feed/GetFeedDetails",
        data: data,
        success: function (json) {
            if (json) {
                alert('ok');
            } else {
                alert('failed');
            }
        },
    });

Хорошо, обе переменные data и data2 имеют JSON строковую форму ..

data: data, // Работает

data: data2, // это не работает работа

Мой контроллер

public async Task<PartialViewResult> GetFeedDetails(string json)
    {
         Feed feedData = JsonConvert.DeserializeObject<Feed>(json);
        return PartialView("FeedDetailsModal", feedData );
    }

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 04 августа 2020

вызов AJAX работает с жестко запрограммированной строкой JSON, но не работает с фактическим JSON, и я не знаю, почему

В вашем коде мы может обнаружить, что вы установили Ajax метод запроса на 'GET', поэтому данные будут передаваться через строку запроса, если вы не можете получить ожидаемые данные в методе действия, используйте инструменты разработчика браузера Сетевой инструмент для захвата запроса и проверки его правильности -форматированные данные передаются.

Кроме того, ваш метод действия принимает параметр строкового типа и вручную преобразует его в объект Feed, для достижения того же, вы можете попытаться заставить метод действия принимать параметр типа Feed и сделать так, чтобы он автоматически привязывал значение к свойствам класса модели с помощью функции привязки модели.

public IActionResult GetFeedDetails([FromBody]Feed feed)
{
    //...

Передавать сложные данные через тело запроса, а не в строку запроса, как показано ниже.

var data2 = window.FeedData[index];


$.ajax({
    type: 'Post',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    url: "/Feed/GetFeedDetails",
    data: JSON.stringify(data2),
    success: function (json) {
        if (json) {
            alert('ok');
        } else {
            alert('failed');
        }
    },
});

Результат теста

введите описание изображения здесь

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