0

目标:
从前端到后端发送一个包含许多数据的 json 数据。

问题:
当我将数据发送到后端时,我没有将其作为 IEnumerable 检索

我缺少代码的哪一部分?

信息:
*使用 JQuery 作为前端
*使用 Asp.net mvc 作为后端

谢谢!

@{
    ViewData["Title"] = "Home Page";
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>


<button class="testtest">
    dfdf
</button>

<script type="text/javascript">

    $('.testtest').click(function () {

        var txt = '{"name":"John", "age":30, "city":"New York"}'
        var obj = JSON.parse(txt);

        $.ajax({
            url: '@Url.Action("TestGet")',
            data:
            {
                contactcollection: obj
            },
            dataType: 'json',
            type: 'Get',
            contentType: 'application/json',
            success: function (result) {

                var display = '';


                return;
            }
        });

    });

</script>

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using JsonData.Models;

namespace JsonData.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }


        [HttpGet]
        public JsonResult TestGet(IEnumerable<Contact> contactcollection)
        {

            int ddd = 23;

            return Json(null);
        }
    }

    public class Contact
    {
        public string name;
        public int age;
        public string city;
    }
}
4

3 回答 3

2

无法通过 HttpGet 发送 IEmunerable 数据。您应该尝试 HttpPost 方法来发送数据。然后,将您的数据放入请求正文中,您的控制器应该是:

[HttpPost]
public JsonResult TestGet([FromBody]IList<Contact> contactcollection)
{
    int ddd = 23;

    return Json(null);
}
于 2020-10-06T09:08:13.397 回答
0
var values = ['1', '2', '3'];

// Make the ajax call
$.ajax({
    type: "POST",
    url: '@Url.Action("done")',
    data: { ids: values },
    dataType: "json",
    success: function (result) {
        alert('Yay! It worked!');
    },
    error: function (result) {
        alert('Oh no :(');
    }
});

    [HttpPost]
    public JsonResult done(List<string> ids)
    {
        bool data = false;

        if (data)
        {
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json("The attached file is not supported", MediaTypeNames.Text.Plain);
        }
        else
        {
            Response.StatusCode = (int)HttpStatusCode.OK;
            return Json("Message sent!", MediaTypeNames.Text.Plain);
        }
    }

来源

AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为 List<string> 总是返回 Null?

https://www.c-sharpcorner.com/article/asp-net-mvc-how-to-use-ajax-with-json-parameters/

使用ajax将javascript数组发送到代码后面(c#)

Jquery Ajax,从 mvc.net 控制器返回成功/错误

于 2020-10-07T06:32:19.950 回答
0

我想我明白这里发生了什么。你告诉你的控制器期待一个IEnumerable<Contact>,但你实际上只是传递了一个Contact。将您的 JSON 字符串更改为

var txt = '{"contactcollection":[{"name":"John", "age":30, "city":"New York"}]}'
var obj = JSON.parse(txt);

然后将您的ajax更改为:

$.ajax({
        url: '@Url.Action("TestGet")',
        data:obj,
        dataType: 'json',
        type: 'Post',
        contentType: 'application/json',
        success: function (result) {

            var display = '';


            return;
        }
    });

并使用 POST 而不是 GET

于 2020-10-07T06:44:18.727 回答