Этот код JavaScript используется для передачи строки из представления в действие в контроллере:
<script type = "text/javascript">
$(document).on('click', 'a', function () {
$.ajax({
type: 'POST',
url: '/brandsOfACategory',
contentType: 'application/json; charset:utf-8',
data: JSON.stringify(this.id)
})
});
</script>
BrandOfAКод категории в контроллере:
public ActionResult brandsOfACategory(string id)
{
return View();
}
Код работает не так, как ожидалось, поскольку идентификатор становится нулевым.
Кто-нибудь может помочь?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вашем текущем коде, когда выполняется вызов ajax, полезная нагрузка запроса имеет только строковое значение. Например, если ваша нажатая ссылка имеет значение атрибута Id "link1", она отправит приведенную ниже строку в качестве полезной нагрузки запроса для вашего вызова ajax. (Вы можете увидеть это, если откроете свои инструменты разработчика-> вкладку сети)
"link1"
Чтобы привязка модели работала, полезная нагрузка должна иметь формат «ключ-значение», чтобы значение было сопоставлено с параметром с тем же значением, что и ключ.
Поскольку это простое значение, вам не обязательно отправлять версию в формате JSON в виде строк, а contentType как application/json. Просто отправьте объект JS как data. Убедитесь, что вы отправляете объект JavaScript, имя ключа / свойства которого совпадает с именем параметра вашего метода действия (id), и он будет работать.
Предположим, что ваш тег привязки имеет допустимое значение атрибута Id, так что выражение this.id возвращает допустимое строковое значение.
<a href = "/SomeUrl" id = "myId">MyLink</a>
В сценарии вы, вероятно, захотите также остановить обычное поведение щелчка, чтобы предотвратить переход страницы к значению атрибута href.
$(document).on('click', 'a', function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/brandsOfACategory',
data: { id :this.id }
}).done(function (res) {
console.info('result from ajax call',res);
})
});
Это отправит значение типа id=myId в качестве данных формы для запроса. Поскольку вы не указываете contentType явно, он будет использовать application/x-www-form-urlencoded по умолчанию.
Если ссылка, по которой щелкнул пользователь, не имеет атрибута Id, код не отправит никакого значения, потому что this.id вернет пустую строку, а значение вашего параметра на стороне сервера будет нулевым.
$.ajax({
type: 'POST',
url: '/brandsOfACategory',
contentType: 'application/json; charset:utf-8',
data: { 'id': id }
})
Код Ajax
$.ajax({
url: "controllerurl",
type: "POST",
data: {
id: "123"
},
dataType: "json",
success: function(result) {
//Write your code here
}
});
Для получения дополнительной информации о ajax ссылка на сайт
Привязка параметров в ASP.Netссылка на сайт
this.idможет содержать ноль - также нет необходимости использоватьcontentType, потому что вы можете передавать его какdata: { id: "someid" }.