此代码无需发送参数即可运行:
$(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)
答案 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);
}
}
});
});
});