asp.net核心中的ajax POST int参数

dom*_*yra 9 ajax asp.net-ajax asp.net-core

我正在将我的 MVC 项目迁移到 Core,并且我一直很难修复所有旧的 ajax 调用。

我可以将模型和字符串参数传递给控制器​​,但是,整数对我不起作用。

我可以将它们作为字符串参数包装到 JSON 对象中,例如[FromBody]string objId在控制器中,但随后我必须从 Json 解析 int val {'objId' : 1}

有没有办法可以避免这种情况而只传递一个整数?

下面是我正在尝试的代码。

[HttpPost]
public JsonResult PassIntFromView([FromBody]int objId)
{
    //DO stuff with int here
}
Run Code Online (Sandbox Code Playgroud)

这是js。

var data = { "objId": 1};
    $.ajax({
        url: '@Url.Action("PassIntFromView", "ControllerName")',
        data: JSON.stringify(data),
        type: "POST",
        dataType: 'JSON',
        contentType: "application/json",
        success: function(data) {
            //do stuff with json result 
        },
        error: function(passParams) {
            console.log("Error is " + passParams);
        }
    });
Run Code Online (Sandbox Code Playgroud)

objId是在控制器中始终为0。

我试过这个,但没有做JSON.stringify(data)也没有结果。

我还尝试了所有不同的表单属性变体。

Xue*_*hen 17

尝试使用 contentType 作为'application/x-www-form-urlencoded'

 var data = { objId: 1 };
 $.ajax({
     url: '@Url.Action("PassIntFromView", "ControllerName")',
     type: "post",
     contentType: 'application/x-www-form-urlencoded',
     data: data,
     success: function (result) {
         console.log(result);
     }
 });
Run Code Online (Sandbox Code Playgroud)

然后移除[FromBody]控制器中的属性

[HttpPost]
public JsonResult PassIntFromView(int objId)
{
    //Do stuff with int here
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么它适用于“application/x-www-form-urlencoded”而不适用于“application/json”?是因为某些配置吗? (5认同)

Dea*_*ers 5

我相信您的问题可能是您将一个对象传递给 api,但试图将其转换为原语。我知道已经有一个选定的答案,但请尝试一下。

var data = { };
data["objId"] = 1; //I just wanted to show you how you can add values to a json object
$.ajax({
    url: '@Url.Action("PassIntFromView", "ControllerName")',
    data: JSON.stringify(data),
    type: "POST",
    dataType: 'JSON',
    contentType: "application/json",
    success: function(data) {
        //do stuff with json result 
    },
    error: function(passParams) {
        console.log("Error is " + passParams);
    }
});
Run Code Online (Sandbox Code Playgroud)

您创建一个模型类

public class MyModel {
     public int ObjId {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

您的控制器应该期望其中之一

[HttpPost]
public JsonResult PassIntFromView([FromBody] MyModel data)
{
    //DO stuff with int here
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,这对我有用,但我想这样做而不必将原语包装在模型中。但如果有人想通过一个模型,这是一个很好的例子! (2认同)