如何在带有Ajax Post的.net core MVC中使用模型绑定器?

时间:2019-01-13 19:35:24

标签: c# asp.net-core-mvc asp.net-core-2.1

我是.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) {

            }
        });

3 个答案:

答案 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
}