#c# #jquery #arrays #asp.net-core #razor
#c# #jquery #массивы #asp.net-core #razor
Вопрос:
У меня есть jquery на странице razor, собирающий проверенные идентификаторы и передающий их контроллеру в asp.net основное приложение.
Jquery работает нормально, но я всегда получаю нулевое количество в контроллерах.
Я попробовал некоторые из приведенных здесь примеров. Я также использую [frombody], это даже ударило по контроллеру
$('#Delete').click(function () {
var fav = [];
$.each($("input[name='ID']:checked"), function () {
fav.push($(this).val());
});
$.ajax({
type: "post",
url: "/Loan/Delete",
dataType: "json",
data: JSON.stringify(fav),
success: function (result) {
}
})
});
контроллер
В контроллерах количество идентификаторов равно нулю
public void DeleteStatementsRoles(ICollection<Products> ids){}
Я думаю, я делаю что-то не так
Комментарии:
1. При отправке только json вам необходимо установить соответствующий ContentType
2. Я добавил « ContentType: «application / json; charset = utf-8»,« также не сработало
3. Ооо … у вас есть
favorite
данные, но массив названfav
. Обязательно проверьте ошибки в консоли инструментов разработчика браузера, которые бы выбрасывали их туда4. Я исправил, теперь я могу получить массив в консоли
Array(2) 0: "1" 1: "2"
, но все еще не добираюсь до контроллера5. Не могли бы вы, пожалуйста, поделиться своей моделью продукта? И как вы спроектировали свою
favorite
переменную.
Ответ №1:
Вот рабочая демонстрация:
Модель:
public class Products
{
public int Id { get; set; }
}
Вид:
<form>
<input name="ID" type="checkbox" value="1"/>
<input name="ID" type="checkbox" value="2"/>
<input type="button" id="Delete" value="delete" />
</form>
@section Scripts
{
<script>
$('#Delete').click(function () {
var fav = [];
$.each($("input[name='ID']:checked"), function () {
var obj = {}; //change here...
obj.Id = $(this).val()
fav.push(obj);
});
$.ajax({
type: "post",
url: "/Home/Delete",
contentType: "application/json", //add this..
dataType: "json",
data: JSON.stringify(fav),
success: function (result) {
}
})
});
</script>
}
Контроллер:
public class HomeController : Controller
{
[HttpPost]
public void Delete([FromBody] ICollection<Products> ids)
{
//do your stuff...
}
}
Результат:
Другая ситуация: поскольку я не уверен, какова ваша модель, вот также рабочая демонстрация, модель которой содержит список.
Модель:
public class Products
{
public List<int> Id { get; set; }
}
Вид:
<form>
<input name="ID" type="checkbox" value="1"/>
<input name="ID" type="checkbox" value="2"/>
<input type="button" id="Delete" value="delete" />
</form>
@section Scripts
{
<script>
$('#Delete').click(function () {
var fav = [];
$.each($("input[name='ID']:checked"), function () {
fav.push($(this).val());
});
var favarite = []; //add...
favarite.push({ id: fav });
$.ajax({
type: "post",
url: "/Home/Delete",
contentType: "application/json", //add this...
dataType: "json",
data: JSON.stringify(favarite),
success: function (result) {
}
})
});
</script>
}
Комментарии:
1. Моя модель похожа на первый пример. как только я помещаю
[FromBody]
, он не попадает в контроллер. если я удалю[FromBody]
, то контроллер попаданий будет равен нулю2. Убедитесь, что вы добавили
contentType: "application/json"
в свой ajax.3. Я предлагаю, чтобы вы могли поделиться своей моделью и всем представлением razor с помощью jQuery. Это поможет вам быстрее решить проблему.
4. Razor огромен, другое дело, что я попробовал
IFormCollection
и получил « «[{«Идентификатор»:»1″},{» Идентификатор»:»2″}]» « Возможно, мне придется поделиться им в конечном итоге5. Я думаю, вам нужно скопировать весь мой код в свой проект. Возможно, вы что-то упустили в своем проекте. Убедитесь, что добавляете
contentType: "application/json"
в свой ajax и добавляете[FromBody]
в своем действии.