Использование строкового массива в качестве параметра не имеет смысла для меня.Теперь вам нужно сделать код на стороне клиента, чтобы построить сложную строку, а на стороне сервера - проанализировать ее, чтобы получить значения свойств каждого элемента.
ИМХО, чистый подход заключается в использовании модели представления и использовании преимуществПривязка модели 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
сгенерировать правильный относительный путь к методу действия.