在 C# ASP.NET Core MVC 中使用 AJAX 将数据从视图传递到控制器

Pass data from view to controller using AJAX in C# ASP.NET Core MVC

我尝试查看类似问题的答案,其中 none 对我的代码有效。我尝试了很多不同的东西,它应该做的就是 post 全名,然后将其显示回视图中。 查看代码:

    <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);
        }

首先,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);
        }

测试结果如下: