ajax параметр POST int в ядре asp.net - PullRequest
1 голос
/ 08 марта 2019

Я переношу свой проект MVC в Core, и мне было трудно исправить все старые вызовы ajax.

Я могу передать параметры модели и строки в контроллер, однако у меня не работают целые числа.

Я могу обернуть их в объект JSON в виде строкового параметра, такого как [FromBody]string objId в контроллере, но затем мне нужно проанализировать int val из Json {'objId' : 1}.

Есть ли способ, которым я могу избежать этого и просто передать int?

ниже код, который я пытаюсь

[HttpPost]
public JsonResult PassIntFromView([FromBody]int objId)
{
    //DO stuff with int here
}

вот это 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);
        }
    });

objId всегда равно 0 в контроллере.

Я пробовал это, не выполняя JSON.stringify(data), а также без результата.

Я также попробовал все различные варианты атрибутов формы.

Ответы [ 5 ]

3 голосов
/ 08 марта 2019

Попробуйте использовать 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);
     }
 });

Затем удалите атрибут [FromBody] в контроллере

[HttpPost]
public JsonResult PassIntFromView(int objId)
{
    //Do stuff with int here
}
1 голос
/ 08 марта 2019

Js

var data = {"objId": 1};

$. Ajax ({

url: "ControllerName/PassIntFromView",

data: data,

type: "POST",

dataType: 'JSON',   

success: function(data.result!=null) {

console.log(data.result);

},
error: function(passParams) {
    console.log("Error is " + passParams);
}

});

1 голос
/ 08 марта 2019

JSON предпочитает строки, а не целые числа. Вам лучше использовать JSON.stringify (data) для анализа вашего контроллера, преобразовать его в целое число в контроллере, а затем проанализировать строку, которая была возвращена как:

var data = { objId: 1};
$.ajax({
    url: '@Url.Action("PassIntFromView", "ControllerName")',//asp.net - url: 'api/controllerName/controllerFunction'
    data: JSON.stringify(data),
    type: "POST",
    dataType: 'JSON',
    contentType: "application/json",
    success: function(data) {
        var result = JSON.parse(data);
        //do stuff with json result 
    },
    error: function(passParams) {
        console.log("Error is " + passParams);
    }
});
1 голос
/ 08 марта 2019

Попробуйте:

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

Ваш контроллер:

[HttpPost]
public JsonResult PassIntFromView(int objId)
{
    //DO stuff with int here
}
0 голосов
/ 28 марта 2019

Я полагаю, что ваша проблема может заключаться в том, что вы передаете объект в 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);
    }
});

Вы создаете класс модели

public class MyModel {
     public int ObjId {get;set;}
}

Ваш контроллер должен ожидать один из этих

[HttpPost]
public JsonResult PassIntFromView([FromBody] MyModel data)
{
    //DO stuff with int here
}
...