Ajax post in ASP.NET 核心 1 不传递值
Ajax data post in ASP.NET Core 1 doesn't pass values
当从数据字段传递数据时,如何使用 Ajax POST 数据?问题 似乎 是我的数据没有正确发布到控制器,因为我试图用硬编码数字替换实际数据属性但仍然不能 [=50= 】 那个号码。这是我的 ajax 电话:
$(".js-toggle-attendance")
.click(function(e) {
var button = $(e.target);
$.ajax({
url: "/api/attendances/",
method: "POST",
contentType: "application/json",
data: 'gigId : button.attr("data-gig-id")',
dataType: "json"
})
.done(function() {
button
.removeClass("btn-default")
.addClass("btn-info")
.text("Going");
})
.fail(function() {
alert("Something failed!");
});
});
});
</script>
我的控制器操作如下:
[HttpPost]
public IActionResult Attend(AttendanceDTO dto)
{
而 AttendanceDTO 只是一个简单的数据传输对象 class:
public class AttendanceDTO
{
public int GigId { get; set; }
}
我尝试了以下数据方法的变体,Chrome Dev Tools/Network 请求负载如下(我正在单击 id=1 的按钮):
data: 'gigId : button.attr("data-gig-id")'--> gigId : button.attr("data-gig-id")
data: { "gigId": button.attr("data-gig-id") } --> gigId=1
data: button.attr("data-gig-id") --> 1 No Properties
data: "2" --> 2 No Properties
在所有情况下,调试控制器操作都会将 dto 字段显示为 0。
更新:
我添加了 [FromBody] 标签和 JSON 字符串化数据,现在似乎发布了正确的数据。但是,上面的 fail 方法一直在执行。我更新了代码以提取如下错误消息:
$(".js-toggle-attendance")
.click(function(e) {
var button = $(e.target);
$.ajax({
url: "/api/attendances/",
method: "POST",
contentType: "application/json",
data: JSON.stringify({ "gigId": button.attr("data-gig-id") }),
dataType: "json",
success: function() {
button
.removeClass("btn-default")
.addClass("btn-info")
.text("Going");
},
error: function(error) {
var x = error;
alert("Something failed!");
}
});
});
以及我能够从 Chrome 开发工具中捕获的错误消息:
error = Object {readyState: 4, responseText: "", status: 200, statusText: "OK"
修复上述问题的更新:
只需要删除 dataType: "json" 因为服务器没有推回 json.
您没有将您的操作参数声明为 [FromBody]
。
[HttpPost]
public IActionResult Attend([FromBody]AttendanceDTO dto)
{
}
应该可以解决问题。至于数据,{ "gigId": button.attr("data-gig-id") }
应该是正确的格式,尽管您可能需要在传递之前将其转换为 json 字符串。
我通过添加 GigId 遇到了同样的问题:button.attr("data-gig-id")。能够修复它
这可能会有所帮助
$(document).ready(function() {
$(".js-toggle-attendance").click(function (e) {
var button = $(e.target);
$.post("/api/attendances", { GigId: button.attr("data-gig-id") })
.done(function() {
button
.removeClass("btn-default")
.addClass("btn-info")
.text("Going");
})
.fail(function() {
alert("something failed !");`enter code here`
});
});
});
如果它对其他人有帮助,我有一个没有无参数构造函数的 DTO
并且 ASP.NET Core 之前会抛出异常,而 ASP.NET Core 不会't,它只是给你一个空对象
当从数据字段传递数据时,如何使用 Ajax POST 数据?问题 似乎 是我的数据没有正确发布到控制器,因为我试图用硬编码数字替换实际数据属性但仍然不能 [=50= 】 那个号码。这是我的 ajax 电话:
$(".js-toggle-attendance")
.click(function(e) {
var button = $(e.target);
$.ajax({
url: "/api/attendances/",
method: "POST",
contentType: "application/json",
data: 'gigId : button.attr("data-gig-id")',
dataType: "json"
})
.done(function() {
button
.removeClass("btn-default")
.addClass("btn-info")
.text("Going");
})
.fail(function() {
alert("Something failed!");
});
});
});
</script>
我的控制器操作如下:
[HttpPost]
public IActionResult Attend(AttendanceDTO dto)
{
而 AttendanceDTO 只是一个简单的数据传输对象 class:
public class AttendanceDTO
{
public int GigId { get; set; }
}
我尝试了以下数据方法的变体,Chrome Dev Tools/Network 请求负载如下(我正在单击 id=1 的按钮):
data: 'gigId : button.attr("data-gig-id")'--> gigId : button.attr("data-gig-id")
data: { "gigId": button.attr("data-gig-id") } --> gigId=1
data: button.attr("data-gig-id") --> 1 No Properties
data: "2" --> 2 No Properties
在所有情况下,调试控制器操作都会将 dto 字段显示为 0。
更新: 我添加了 [FromBody] 标签和 JSON 字符串化数据,现在似乎发布了正确的数据。但是,上面的 fail 方法一直在执行。我更新了代码以提取如下错误消息:
$(".js-toggle-attendance")
.click(function(e) {
var button = $(e.target);
$.ajax({
url: "/api/attendances/",
method: "POST",
contentType: "application/json",
data: JSON.stringify({ "gigId": button.attr("data-gig-id") }),
dataType: "json",
success: function() {
button
.removeClass("btn-default")
.addClass("btn-info")
.text("Going");
},
error: function(error) {
var x = error;
alert("Something failed!");
}
});
});
以及我能够从 Chrome 开发工具中捕获的错误消息:
error = Object {readyState: 4, responseText: "", status: 200, statusText: "OK"
修复上述问题的更新: 只需要删除 dataType: "json" 因为服务器没有推回 json.
您没有将您的操作参数声明为 [FromBody]
。
[HttpPost]
public IActionResult Attend([FromBody]AttendanceDTO dto)
{
}
应该可以解决问题。至于数据,{ "gigId": button.attr("data-gig-id") }
应该是正确的格式,尽管您可能需要在传递之前将其转换为 json 字符串。
我通过添加 GigId 遇到了同样的问题:button.attr("data-gig-id")。能够修复它 这可能会有所帮助
$(document).ready(function() {
$(".js-toggle-attendance").click(function (e) {
var button = $(e.target);
$.post("/api/attendances", { GigId: button.attr("data-gig-id") })
.done(function() {
button
.removeClass("btn-default")
.addClass("btn-info")
.text("Going");
})
.fail(function() {
alert("something failed !");`enter code here`
});
});
});
如果它对其他人有帮助,我有一个没有无参数构造函数的 DTO
并且 ASP.NET Core 之前会抛出异常,而 ASP.NET Core 不会't,它只是给你一个空对象