Передача данных из представления в контроллер с использованием AJAX в C # ASP.NET Ядро MVC

#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» в методе контроллера. Вы даже не представляете, сколько разочарований вы мне доставили. Спасибо вам миллион раз!