没有用Ajax Call填充的参数

时间:2017-04-12 12:03:41

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

这是我的控制器

    [HttpPost]
    public bool Sync(int? id, string name)
    {
        throw new NotImplementedException();
    }

这是我正在尝试对此控制器进行的ajax请求调用:

<script type="text/javascript">
    var buttonClicked = document.getElementById("syncLegacy");
    buttonClicked.addEventListener('click', function () { syncLegacyMake(); }, false);

    function syncLegacyMake() {
        $.ajax({
            url: '/Legacy/Sync',
            type: 'POST',
            data: JSON.stringify({
                id: $("#Id").val(),
                name: $("#Name").val()
            }),
            contentType: 'application/json; charset=utf-8',
            success: function (data) {

            },
            error: function () {
                alert("error");
            }
        });
    }

控制器被命中,但参数没有值。值均为空。

当我在chrome控制台上查看调用本身时,会在标题中的Request Payload下填充这些值:

{id:“01”,姓名:“泰坦”} ID : “01” 名称 : “泰坦”

有谁可以指出我在这里做错了什么?我能够在.net 4.6.1框架中做同样的事情,所以不确定框架是否已经改变了?

1 个答案:

答案 0 :(得分:0)

你有没有尝试过以下的事情:

使用Dto而不是单独的简单类型:

public class SyncDto
{
    public int? Id {get;set;}
    public string Name {get;set;}
}
// Controller action:
[HttpPost]
public bool Sync(SyncDto input)
{
    throw new NotImplementedException();
}

让Jquery自己进行字符串化

让jquery想出你自己的ajax调用:

     $.ajax({
        url: '/Legacy/Sync',
        type: 'POST',
        data: {
            id: $("#Id").val(),
            name: $("#Name").val()
        }
    });