我是.net核心MVC的新手,正在尝试执行类似于.net框架MVC的Ajax发布。我只是在尝试将单个int值发布到下面的控制器操作中。 Ajax调用命中了控制器,但是action参数始终为0。我验证了Ajax请求有效负载中发送的整数值正确。我想念什么?
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Ajax_GenerateSecretNum([FromBody]int lower)
{
return Json(new { success = true });
}
$.ajax({
url: '@Url.Action("Ajax_GenerateSecretNum", "Home")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: { lower: lower },
success: function (response) {
}
});
答案 0 :(得分:0)
您可以为控制器参数创建模型(DTO),并在数据上使用JSON.stringify()
,然后再发布到控制器。
$.ajax({
url: '@Url.Action("Ajax_GenerateSecretNum", "Home")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify({ lower: lower }),
success: function (response) {
}
});
public class ModelDto
{
public int Lower { get; set; }
}
[HttpPost]
public IActionResult Ajax_GenerateSecretNum([FromBody]ModelDto model)
{
// model.Lower should contain your int
return Json(new { success = true });
}
答案 1 :(得分:0)
$.ajax({
url: '@Url.Action("Ajax_GenerateSecretNum", "Home")',
type: 'POST',
data: { "lower": lower, "upper": upper },
success: function (response) {
}
});
将我的jQuery ajax更改为上述示例解决了该问题。我不确定为什么,但是看起来好像指定了额外的ajax参数导致值无法进行模型绑定。更改了ajax之后,我还能够从控制器操作中删除[FromBody]属性。
答案 2 :(得分:0)
您可以执行以下操作:
$.ajax({
method: "POST",
data: { "Property1": "value1", "Property2": "value2"},
url: "@Url.Action("Ajax_GenerateSecretNum", "Home")",
success: function (data) {
//success login
},
error: function (data) {
alert('error' + data.status);
}
});
控制器如下所示:
[HttpPost]
public ActionResult Ajax_GenerateSecretNum(ModelClass modelClass)
{
//You logic will be here
}