#c# #ajax #asp.net-mvc #asp.net-core #asp.net-ajax
#c# #ajax #asp.net-mvc #asp.net-core #asp.net-ajax
Вопрос:
Я пытался посмотреть ответы на похожие вопросы, и ни один из них не работает для моего кода. Я перепробовал много разных вещей, все, что нужно сделать, это опубликовать полное имя, а затем отобразить его обратно в представлении. Код представления:
<script type="text/javascript">
$(document).ready(function () {<script type="text/javascript">
$(document).ready(function () {
$('#buttonDemo2').click(function () {
var fullName = $('#fullName').val();
var payload = {fn : fullName};
$.ajax({
type: 'POST',
url: '/demo/demo2/',
contentType: 'application/json',
data: JSON.stringify(payLoad),
success: function (result) {
$('#result2').html(result);
}
});
});
</script>
<fieldset>
<legend>Demo 2</legend>
Full Name <input type="text" id="fullName" />
<input type="button" value="Demo 2" id="buttonDemo2" />
<br />
<span id="result2"></span>
</fieldset>
Код контроллера:
[HttpPost]
public IActionResult Demo2(string fullName)
{
return new JsonResult("Hello " fullName);
}
Комментарии:
1. Вы получаете какую-либо ошибку? что не работает?
2. Ошибок нет. Он возвращает только «Привет», но не все, что я ввел в форму, добавленную в конец. Например, это означает сказать «Привет, Боб». Таким образом, значение никогда не поступает на контроллер.
Ответ №1:
Во-первых, когда вы передаете строку с помощью ajax в action, вы должны убедиться, что полученное имя параметра совпадает с именем входящего параметра.
Итак, вы должны изменить var payload = {fn : fullName};
на var payload = {fullName: fullName};
, или изменить public IActionResult Demo2(string fullName)
на public IActionResult Demo2(string fn)
.
Затем, поскольку вы передали только строку, а не параметр объекта, поэтому вам не нужно использовать JSON.stringify
и удалять contentType: 'application/json'
.
Вот подробный код:
<script type="text/javascript">
$(document).ready(function () {
$('#buttonDemo2').click(function () {
var fullName = $('#fullName').val();
var payload = { fullName: fullName }; // change name
$.ajax({
type: 'POST',
url: '/demo/demo2/',
// contentType: 'application/json', // remove this line
data: payload, //remove JSON.stringify
success: function (result) {
$('#result2').html(result);
}
});
});
});
</script>
<fieldset>
<legend>Demo 2</legend>
Full Name <input type="text" id="fullName" />
<input type="button" value="Demo 2" id="buttonDemo2" />
<br />
<span id="result2"></span>
</fieldset>
Контроллер:
[HttpPost]
public IActionResult Demo2(string fullName)
{
return new JsonResult("Hello " fullName);
}
Вот результат теста:
Комментарии:
1. Вы, сэр, гений! Большое вам спасибо! Да, я думаю, что основной проблемой была полезная нагрузка var = {fn : FullName}; где «fn» не соответствовало «FullName» в методе контроллера. Вы даже не представляете, сколько разочарований вы мне доставили. Спасибо вам миллион раз!