我的控制器代码:
[HttpPost]
public async Task<JsonResult> GetWebsite(int Id)
{
var website = await _uWebsitesService.GetWebsite(Id);
return (website == null ? this.Json("Website Not Found") : this.Json(website));
}
这是ajax:
$(".edit-website-btn").on("click", function () {
let id = $(this).attr('data-id');
$.ajax({
type: "POST",
url: "/userpanel/GetWebsite/",
data: { Id: id },
dataType: "json",
contentType: "application/json",
success: function (result) {
console.log(result);
},
error: function (error) {
console.log(error);
},
})
})
当我检查控制台日志的结果,它是空的,当请求类型是post,但当我改变ajax请求和控制器方法GET它返回正确的对象。
这是因为对于你的post方法,你使用的是应用程序/json内容,不发送id到一个动作,所以动作是使用id=0默认情况下,不能得到任何数据。Get操作具有正确的id并返回数据。您可以尝试通过删除contentType: "application/json">
来修复ajax。$.ajax({
type: "POST",
url: "/userpanel/GetWebsite/",
data: { Id: id },
dataType: "json",
.....
,但我认为最好使用GET
$.ajax({
type: "GET",
url: "/userpanel/GetWebsite?id="+id,
dataType: "json",
...
也许你也应该试试这个
let Id = $(this).data('id');
//or
let Id = this.getAttribute('data-id');
ajax调用中的data
参数是一个对象,它恰好有一个名为Id
的属性,具有您想要的值。
。只需将JavaScript更改为只发送整数。
data: id,
也有助于c#的绑定,你还应该指定参数来自请求体。这在技术上是可选的,但可能有助于可维护性,并确保您的值不会意外地来自其他来源(如rouge查询参数)。
public async Task<JsonResult> GetWebsite([FromBody] int Id)
如果你需要在POST调用中传递多个值,你需要在c#中创建一个类并绑定它,而不是绑定int。