JSON Object - JavaScript, C #, MVC - PullRequest
       3

JSON Object - JavaScript, C #, MVC

0 голосов
/ 28 ноября 2018

У меня есть for, который заполняет массив, откуда cont пришел из View

function GenerateJSON(cont) {
        var songs= [];

        for (var i = 0; i <= cont; i++) {
            songs[i] = {
                id: i,
                genre: $(".genre" + i).val(),
                song: $(".song" + i).val()
           }
        }
        $.ajax({
            url: "Generate",
            type: 'POST',
            dataType: "json",
            data: { songs: JSON.stringify(songs) },
            success: function (data) {
            }
        })
    }

На контроллере у меня только один блок музыки

пример:

songs= [{"id":0,"genre":"","song":"","id":1,"genre":"","song":"","id":2,"genre":"","song":""}]

Я хочу это:

songs=[{"id":0,"genre":"","song":""},{"id":1,"genre":"","song":""},{id":2,"genre":"","song":""}]

Контроллер

public JsonResult Generate(string[] songs)
    {}

1 Ответ

0 голосов
/ 28 ноября 2018

Использование строкового массива в качестве параметра не имеет смысла для меня.Теперь вам нужно сделать код на стороне клиента, чтобы построить сложную строку, а на стороне сервера - проанализировать ее, чтобы получить значения свойств каждого элемента.

ИМХО, чистый подход заключается в использовании модели представления и использовании преимуществПривязка модели MVC.Начните с создания модели представления для представления ваших данных.

public class SongVm
{
    public int Id { set; get; }
    public string Genre { set; get; }
    public string Song { set; get; }
}

Теперь используйте это как параметр вашего метода действия.Поскольку вы хотите отправить коллекцию ваших объектов, используйте List<SongVm> в качестве параметра.

[HttpPost]
public ActionResult Gerar(List<SongVm> songs)
{
    // Simply returning the data with a message property as well
    return Json(new { messge ="success", data = songs });
}

Теперь из кода на стороне клиента отправьте строковую версию JSON вашего массива, указав application/json какзначение contentType свойства опции, которую мы передаем методу $.ajax.

var songs = [];

for (var i = 0; i <= cont; i++) {
    songs[i] = {
        id: i,
        genre : "test genre" + i,
        song : "test song" + i
    };
}

$.ajax({
        url: "/Home/Gerar",
        type: 'POST',
        contentType: "application/json",
        data: JSON.stringify(songs),
        success: function (data) {
            console.log(data);
        },
        error: function (a, b, c) {
            console.log(c);
        }
 })

Теперь $.ajax добавит заголовок запроса Content-Type к вызову со значением application/json,Как часть привязки модели, связыватель модели по умолчанию будет считывать это значение заголовка запроса, а затем решит прочитать данные из тела запроса (полезная нагрузка запроса)

Я бы также рекомендовал использовать вспомогательные методы Url, такие как Url.Actionсгенерировать правильный относительный путь к методу действия.

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