【问题标题】:JQuery values passed to WebApi is always null传递给 WebApi 的 JQuery 值始终为空
【发布时间】:2013-02-26 09:38:39
【问题描述】:

我在使用 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 !');
            }
        })
    }

当我调试“数据”变量成功捕获数据时。

然后我的 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

有人可以帮忙吗?

提前致谢

莱克斯

【问题讨论】:

  • 你能发布TruckInfo的定义吗?
  • 达林在下面回答了我的问题。不过感谢您的回复。

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


【解决方案1】:

首先修复您的 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 就会将其绑定到您的模型。

【讨论】:

  • 应该从数据中删除obj 吗?
  • 感谢您的快速回复。现在它已经正确传递了值:) 我可以问另一个问题吗?在我的控制器中,我不确定我的代码。当它到达“SaveChanges”时,它会引发以下错误...无法更新 EntitySet 'TruckInfo',因为它有一个 DefiningQuery 并且 元素中不存在 元素来支持当前操作。
  • @LexEichner:请通过 cmets 询问关于 SO 的另一个问题
  • 我不知道。这与 Web API 无关,但可能与您使用的底层数据访问技术有关。应该是EF什么的。您应该在 Web API 上下文之外发布另一个问题,您将在其中显示您的实体、它们的值以及您正在使用的查询。
  • 好的,没问题。谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多