传递给Web Api的JQuery值始终为null

时间:2013-02-26 09:38:39

标签: c# jquery asp.net-mvc asp.net-web-api

我在使用Web Api时遇到了麻烦,希望有人可以帮助我。

我有一个jQuery方法如下......

    function OnInsert(evt) {
        var truckId = $("#txtTruckId").val();
        var truckReg = $("#txtTruckReg").val();
        var description = $("#txtDescription").val();
        var condition = $("#txtCondition").val();
        var data = '{"obj":{"TruckId":"' + truckId + '","Reg":"' + truckReg +
                   '","Description":"' + description + '","Condition":"' + condition + '"}}';
        var json = JSON.stringify(data)

        $.ajax({
            url: '/api/Values',
            cache: false,
            type: 'POST',
            data: json,
            dataType: 'json',
            success: function (results) {
                $("#txtTruckId").val('');
                $("#txtTruckReg").val('');
                $("#txtDescription").val('');
                $("#txtCondition").val('');
                $.getJSON("api/Values", LoadCustomers);
                alert('Truck Added !');
            }
        })
    }

当我调试'data'变量成功捕获数据时。

然后我在WebApi控制器中有一个功能......

    // POST api/values
    public void Post(TruckInfo obj)
    {
        WebApiTestEntities db = new WebApiTestEntities();

        db.TruckInfoes.Add(obj);
        db.SaveChanges();
    }

但是,当我调试时,所有参数都显示为空值。

我发现了这个:

http://kennytordeur.blogspot.co.uk/2012/12/web-api-passing-complex-type-in-json.html

哪些状态我需要Global.asax中的以下代码行,但是没有用。

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

我也发现这是一种答案,但在尝试改变我的代码后,看起来它们已经编写的代码仍然不起作用。

jQuery posts null instead of JSON to ASP.NET Web API

有人能帮忙吗?

提前致谢

莱克斯

1 个答案:

答案 0 :(得分:4)

首先修复你的JSON:

var data = {
    truckId: truckId, 
    reg: truckReg, 
    description: description, 
    condition: condition
};
var json = JSON.stringify(data);

然后确保指定正确的内容类型请求标头:

$.ajax({
    url: '/api/Values',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: json,
    success: function (results) {
        $("#txtTruckId").val('');
        $("#txtTruckReg").val('');
        $("#txtDescription").val('');
        $("#txtCondition").val('');
        $.getJSON("api/Values", LoadCustomers);
        alert('Truck Added !');
    }
});
  

我发现了这个:

     

http://kennytordeur.blogspot.co.uk/2012/12/web-api-passing-complex-type-in-json.html

     

哪些状态我需要Global.asax中的以下代码行,但是   没有用。

不,不,不。只要您正确格式化JSON请求,就没有必要,Web API会将其绑定到您的模型。