【问题标题】:Ajax Json is posting null to controller action methodAjax Json 将 null 发布到控制器操作方法
【发布时间】:2016-07-31 20:43:06
【问题描述】:

我有一个带有以下 AJAX Jquery 的剃刀视图,用于将 UserData 对象发布到控制器。它调用了action方法,但在控制器中调试时参数中的值为null。我在网上和 stackoverflow 上查看过类似的问题,但仍然看不到以下代码缺少什么:

在我看来:

$(document).ready(function(){
    $('#button').click(function(e){
        e.preventDefault();

        var UserData = {"name":"test"}

        $.ajax({
            url: '/Home/Send/',
            data : JSON.stringify(UserData),
            type: 'POST',
            traditional: true,
            contentType: 'json',
            success: function (data) {
                $('#message').html("json data was sent to controller");
            }
        });
    })});

在我的控制器中:

[HttpPost]
public JsonResult Send(UserData userdata)
{
    return Json(new { status = true });
}

public class UserData
{
    public string name { get; set; }
}

UserData 对象与我在 AJAX 帖子中发送的对象匹配,但控制器操作方法中的参数值为 null。

我还需要添加什么才能使数据通过控制器?

【问题讨论】:

    标签: jquery json ajax


    【解决方案1】:

    将您的 contentType 更改为 'application/json'。这告诉 ASP.NET MVC 将请求正文反序列化为 JSON,它将修复控制器上的 null 值。

    您的 ajax 代码将类似于以下内容:

    var UserData = {"name":"test"}
    
    $.ajax({
        url: '/Home/Send/',
        data : JSON.stringify(UserData),
        type: 'POST',
        traditional: true,
        contentType: 'application/json',
        success: function (data) {
            $('#message').html("json data was sent to controller");
        }
    });
    

    【讨论】:

    • 感谢您的成功。我以为我已经尝试过“应用程序/json”和其他一些内容类型。是否可以使用这种在 @Html.BeginForm 中发布数据的方法来提交表单值,或者我必须使用表单值创建一个 javascript 对象,然后像上面使用 ajax 的示例中那样将其作为数据发布?跨度>
    • 没问题!使用表单数据,您可以简单地调用$('#yourForm').serialize(),而无需显式发送请求的内容类型。默认情况下,如果没有指定,jQuery 会发送 application/x-www-form-urlencoded 作为 ajax 请求的内容类型。只需确保表单字段的名称正确,ASP.NET MVC 就可以读取请求数据。
    猜你喜欢
    • 2011-05-06
    • 2019-03-30
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2019-01-26
    • 2018-02-06
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多