为什么我不能用ajax向action方法发送参数?

时间:2017-01-20 08:23:47

标签: c# jquery asp.net-mvc

此代码无需发送参数即可运行:

$(function () {
        $('#Fee').on('focus', function () {
            $.ajax({
                url: '@Url.Action("GetFee")', 
                dataType: "json", 
                type: "POST",
                contentType: 'application/json; charset=utf-8', 
                cache: false, 
                data: { }, 
                success: function (data) {
                    if (data.success) {
                        $('#Fee').val(data.message);
                    }
                }
            });
        });
    });

但是,如果我想将参数发送到GetFee操作方法,它就不再有效了:

data: { bookname : 'book1' }

我将动作方法更改为接受参数:

[HttpPost]
public ActionResult GetFee(string bookname)

3 个答案:

答案 0 :(得分:9)

你表示:

contentType: 'application/json; charset=utf-8',

所以请确保您尊重您声称要发送到服务器的内容:

data: JSON.stringify({ bookname : 'book1' })

另一方面,如果你在请求中删除了这个application/json内容类型,jQuery默认会使用application/x-www-form-urlencoded,然后你就可以使用它:

data: { bookname : 'book1' }

答案 1 :(得分:1)

因为您指定的数据类型为“json”。所以你只能在请求中发送json对象。所以你需要以json格式转换数据。

您可以使用 JSON.stringify()方法。 JSON.stringify()方法将JavaScript值转换为JSON字符串。

JSON.stringify(value[, replacer[, space]])

如果您不想使用JSON数据类型,则无需转换它。 只需使用:

$(function () {
    $('#Fee').on('focus', function () {
        $.ajax({
            url: '@Url.Action("GetFee")', 
            type: "POST",
            cache: false, 
            data: { 
               'bookname' : 'book1'
            }, 
            success: function (data) {
                if (data.success) {
                    $('#Fee').val(data.message);
                }
            }
        });
    });
});

答案 2 :(得分:1)

正如Darin Dimitrov之前回复的那样,您不会以您在contentType中声明的格式发送数据。 在我看来,你可以选择以下两种方式:

1.像JSON字符串一样发送参数(查看Darin Dimitrov的答案)并在输入参数前添加[FromBody],以阐明您想要读取此值的位置。

[HttpPost]
 public ActionResult GetFee([FromBody] string bookname)

2.避免在ajax调用中指定contentType和dataType,如下所示

$(function () {
    $('#Fee').on('focus', function () {
        $.ajax({
            url: '@Url.Action("GetFee")',                 
            type: "POST",                
            cache: false, 
            data: { bookname : 'book1' },
            success: function (data) {
                if (data.success) {
                    $('#Fee').val(data.message);
                }
            }
        });
    });
});