【问题标题】:Sending Array Object Data in Javascript to ASP.NET Core Controller using AJAX ()使用 AJAX 将 Javascript 中的数组对象数据发送到 ASP.NET Core 控制器 ()
【发布时间】:2020-06-10 23:19:54
【问题描述】:

我已经尝试了与该问题相关的所有其他解决方案,但仍然找不到我的代码缺少的内容。这是我的 AJAX() 代码。

var group = JSON.stringify({ 'listofusers': listofusers });

console.log("listofusers : " + JSON.stringify({ 'listofusers': group }));
(Assuming I have my listofusers object ready, and yes i've checked the console and it has data inside.)


$.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: "POST",
        url: url,

        data: group,
        success: function (data) {
            console.log("output : " + JSON.stringify(data));
            //doSend(JSON.stringify(data));
            //writeToScreen(JSON.stringify(data));
        },
        error: function (data) {
            console.log("error : " + JSON.stringify(data));
        },
    });

这是我的服务器端控制器。

[HttpPost]
public IActionResult GetMesssage(List<UserModel> listofusers)
{
var g = listofusers;
}

只是简单地从控制器获取,所以我可以验证来自客户端的数据是否真的已经发送。

我尝试了 [FromBody] 属性,但仍然无法从服务器端获取数据。

【问题讨论】:

  • 你也可以发布你的网址吗?
  • var url = "@Url.Action("GetMessage", "Support")"; 这就是我在我的网址中使用的。

标签: javascript asp.net ajax asp.net-core


【解决方案1】:

这是一个如下所示的工作演示:

1.型号:

public class UserModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

2.查看(删除Content-type):

<script>
    var listofusers = [
            { id: 1, name: 'aaa' },
            { id: 2, name: 'bbb' },
            { id: 3, name: 'ccc' }
        ];
    var group = { 'listofusers': listofusers };
    console.log(group);
    $.ajax({
        dataType: 'json',
        type: "POST",
        url: "/home/GetMesssage",
        data: group,
        success: function (data) {
            console.log("output : " + JSON.stringify(data));
        },
        error: function (data) {
            console.log("error : " + JSON.stringify(data));
        },
    });
</script>

3.Console.log(group):

4.结果:

更新:

使用json的另一种方式:

1.查看(将组从JSON.stringify({ 'listofusers': listofusers }); 更改为JSON.stringify(listofusers);):

<script>
    var listofusers = [
            { id: 1, name: 'aaa' },
            { id: 2, name: 'bbb' },
            { id: 3, name: 'ccc' }
    ];
    var group = JSON.stringify(listofusers);
    console.log(group);
    $.ajax({
        contentType:"application/json",
        dataType: 'json',
        type: "POST",
        url: "/home/GetMesssage",

        data: group,
        success: function (data) {
            console.log("output : " + JSON.stringify(data));
        },
        error: function (data) {
            console.log("error : " + JSON.stringify(data));
        },
    });
</script>

2.Controller(添加FromBody):

[HttpPost]
public IActionResult GetMesssage([FromBody]List<UserModel> listofusers)
{
     //...
}

【讨论】:

  • 显然你不需要 JSON.stringify() 数据?但是 AJAX() 中的“contentType: 'application/json; charset=utf-8'”配置呢?
  • 所以,正如我的回答所说,我删除了这一行。您需要仔细阅读我的回答。
  • 抱歉,没看到,我更专注于图片,抱歉。
  • 我已经在这里发布了一个答案,您能看看我找到的答案吗?
  • 请查看我更新的答案。如果对您有帮助,请您接受作为答案吗?参考:How to accept answer
【解决方案2】:

你可以试试这个。

首先将要传递的参数字符串化:

$.ajax({
        url: url,
        type: "POST",
        data: {
            listofusers: JSON.stringify(listofusers),
        },
        success: function (data) {
        },
        error: function (error) {
        }
    });

然后在你的控制器中:

[HttpPost]
public IActionResult GetMesssage(string listofusers)
{
   var jsonModel = new JavaScriptSerializer().Deserialize<object>(listofusers); //replace this with your deserialization code
}

我们在这里所做的是将您的对象作为字符串传递,然后在控制器端接收后反序列化它。

希望这会有所帮助。

【讨论】:

  • 我尝试了这种技术,但是从字符串中反序列化数据会提示错误,说 [ Path " line 1, position 2 有错误。我尝试了 Substring Method, Replace and Remove any不必要的字符字符串,但仍然无法解析数据。我在下面发布了一个“解决方案”,如果我发现的内容有任何问题,请查看。谢谢。
【解决方案3】:

我找到了解决问题的方法,但我只是想澄清一下,也许有解决方法或其他解决方案。

我研究过“JSON.stringify();”传递的数据来自 AJAX(),它就像这样。

"[[{\"ID\":0,\"UserID\":1014,\"Level\":\"support\",\"Department\":\"\",\"Facility\":\"Talisay District Hospital\",\"Firstname\":\"Joseph\",\"Middlename\":\"John\",\"Lastname\":\"Jude\",\"LoginStatus\":false,\"IPAddress\":\"192.168.110.47:12347\"},{\"ID\":0,\"UserID\":1014,\"Level\":\"support\",\"Department\":\"\",\"Facility\":\"Talisay District Hospital\",\"Firstname\":\"Joseph\",\"Middlename\":\"John\",\"Lastname\":\"Jude\",\"LoginStatus\":false,\"IPAddress\":\"192.168.110.47:15870\"}]]"

我想知道 JSON 格式是否是从控制器端解析数据的一个因素。 (这当然是愚蠢的,因为只有一种 JSON 格式。(或者可能还有另一种,如果有,请您发布一些资源以供参考。)

所以我尝试在“JsonConvert.Serialize()”方法中在我的模型中序列化一个虚拟数据,输出的 JSON 数据是这样的。

[{"ID":0,"UserID":1014,"Level":"support","Department":"","Facility":"Talisay District Hospital","Firstname":"Joseph","Middlename":"John","Lastname":"Jude","LoginStatus":false,"IPAddress":"192.168.110.47:12347"},{"ID":0,"UserID":1014,"Level":"support","Department":"","Facility":"Talisay District Hospital","Firstname":"Joseph","Middlename":"John","Lastname":"Jude","LoginStatus":false,"IPAddress":"192.168.110.47:16709"}]

我尝试通过 AJAX() 将 JsonConvert.Serialize() 方法中的输出 JSON 数据发送到控制器,它成功了!我现在感到很欣慰,因为这个问题已经很令人沮丧了。

如果我发现的内容有问题,请回复可能错误或正确的内容。谢谢!

【讨论】:

  • console.log("listofusers : " + JSON.stringify({ 'listofusers': group })); 会得到字符串化数据。你能检查一下console.log(group);吗?你如何使用JsonConvert.Serialize()?
  • 我会尽快回复您。
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多