【问题标题】:Ajax request body from view to controller is empty in ASP NET Core MVC 3从视图到控制器的 Ajax 请求正文在 ASP NET Core MVC 3 中为空
【发布时间】:2021-04-13 13:26:45
【问题描述】:

我有一个场景,我想在 ASP NET Core MVC 3 中从视图到控制器进行 ajax 调用。然后控制器应该返回部分视图作为响应。主要问题是当数据通过 ajax post 请求传递给控制器​​时,控制器发现数据为空。我搜索了很多关于这个主题的在线内容,但没有适合我的解决方案。

这是我的控制器方法:

[HttpPost]
public PartialViewResult AddUserForm(string firstName, string lastName) 
{
    // some stuff happens then
    return PartialView();
}

我的 Ajax post 方法在视图中:

<script>
    function replaceContentsOfDiv() {
        var f = $('#fName').val();
        var l = $('#lName').val();

        $.ajax({
            url: '@Url.Action("AddUserForm", "Reservation")',
            contentType: 'application/json',
            data: JSON.stringify({ firstName: this.f, lastName: this.l }),
            type: "POST",
            success: function(data) {
                $('#placeHolderDiv').html(data);
            },
            error: function() {
                alert("something is wrong");
            }
        });
    }
</script>

来自这个js脚本的数据(var fvar l具有有效值。但是,如果我想在控制器方法中注销string firstNamestring lastName,它们都是空的。这可以用即logger.LogInformation((firstName == null).ToString())

任何人都知道我做错了什么,因此传递到控制器的数据为空?我什至尝试将[FromBody] 注释添加到AddUserForm 参数,但也没有成功。

编辑:修正了我的 JS 脚本中的一些错字。

【问题讨论】:

  • 尝试从您的 ajax 帖子中删除 JSON.stringify() 调用。
  • 看起来你的 js 姓氏变量中有一个额外的“L”(简单的错字)。把 this.f 和 this.l 改成 f 和 l 有影响吗?
  • 嗨@friderik,关于这个案例的任何更新?
  • 和代码var l = $('#lName').vall();var l = $('#lName').val();
  • 大家好,很抱歉那个额外的 'l' 错字 - 这不是问题 :) 我尝试删除 JSON.stringify() 调用,但仍然没有成功......

标签: c# ajax asp.net-mvc asp.net-core


【解决方案1】:

你只需要改变你的 ajax 如下:

$.ajax({
        url: '@Url.Action("AddUserForm", "Reservation")',
        data: {
                 firstname: f,
                 lastname: l
                },
        type: "POST",
        success: function(data) {
            $('#placeHolderDiv').html(data);
        },
        error: function() {
            alert("something is wrong");
        }
    });

【讨论】:

  • 嗨!感谢您的输入,但控制器中的数据仍然为空...
【解决方案2】:

然后我找到了解决方案。问题是如何调用请求。然后我就使用了像这样的常规 jQuery post 方法:

<script>
    function replaceContentsOfDiv() {
        let data = {
            firstName: document.getElementById("fName").value,
            lastName: document.getElementById("lName").value
        }
        console.log(data);
        $.post('@Url.Action("AddUserForm", "Reservation")', data, function (data) {
            $('#placeHolderDiv').html(data);
        });
    };
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2020-06-19
    • 2020-09-07
    相关资源
    最近更新 更多