Javascript jQueryAjax到MVC会产生意想不到的结果

Javascript jQueryAjax到MVC会产生意想不到的结果,javascript,jquery,ajax,asp.net-mvc,json,Javascript,Jquery,Ajax,Asp.net Mvc,Json,我正试图通过Ajax向我的acton发送一个列表。此时,我正在为我的操作获取数据,但是修改的数据是胡言乱语,例如evrything为NULL,并且有5个元素,而不是一个。 我需要通过jquery收集数据,因为我想动态扩展这个列表 我想根本问题在于我的JSON与我的操作所期望的JSON有所不同——但我对这一点还不熟悉,没有看到错误。发送到操作的JSON如下所示: { "ideas": [ { "name": "[0].ID",

我正试图通过Ajax向我的acton发送一个列表。此时,我正在为我的操作获取数据,但是修改的数据是胡言乱语,例如evrything为NULL,并且有5个元素,而不是一个。 我需要通过jquery收集数据,因为我想动态扩展这个列表

我想根本问题在于我的JSON与我的操作所期望的JSON有所不同——但我对这一点还不熟悉,没有看到错误。发送到操作的JSON如下所示:

    {
    "ideas": [
        {
            "name": "[0].ID",
            "value": "1"
        },
        {
            "name": "[0].Name.EnglishText",
            "value": "New Idea"
        },
        {
            "name": "[0].Name.GermanText",
            "value": "Neue Idee"
        },
        {
            "name": "[0].Description.EnglishText",
            "value": "1"
        },
        {
            "name": "[0].Description.GermanText",
            "value": "1"
        }
    ]
}
我尝试构建列表的JSOn版本,如下所示: 实际上完全不同:(

让我解释一下: 该网站如下所示:

 <div id="collapseIdeas" class="panel-collapse collapse">
            <div class="panel-body">
                @for (int i = 0; i < Model.Count(); i++)
                {
                    <div class="panel panel-default">
                        <div class="panel-heading">@Model[i].Name.GetText()</div>
                        <div class="panel-body">
                            @Html.HiddenFor(mbox => Model[i].ID)

                            <div class="form-group">
                                @Html.LabelFor(m => Model[i].Name, htmlAttributes: new { @class = "control-label col-md-2" })
                                <div class="col-md-10">
                                    @Html.EditorFor(model => Model[i].Name, new { htmlAttributes = new { @class = "form-control" } })
                                    @Html.ValidationMessageFor(model => Model[i].Name, "", new { @class = "text-danger" })
                                // warning: abbreviated, originally 5 inputs in this panel-body
                                </div>
                            </div>
                        </div>
                        <div class="panel-footer">
                            <button type="button" id="ButtonDeleteIdea" class="btn btn-danger" value="@Model[i].ID">@CreateRes.DeleteIdea</button>
                        </div>
                    </div>
                }
            </div>
            <div class="panel-footer">
                <button type="button" class="btn btn-primary ButtonAddIdea">@CreateRes.AddIdea</button>
            </div>
接收方法:

[HttpPost]
public async Task<PartialViewResult> AddAnotherProjectIdea(List<ProjectIdea> ideas)
    {
    // gets called, and the List is not null - but the list appears to contain only
    // gibberish, with every value 0 or NULL. 
    //Also there are 5 elements, there should be only one
    }
[HttpPost]
公共异步任务addanotherprojectdea(列出想法)
{
//调用,并且列表不为null-但列表似乎只包含
//胡言乱语,每个值为0或NULL。
//还有5个元素,应该只有一个
}

为了弄清楚您的操作方法期望的是什么,为什么不创建一个方法,将
列表
序列化为JSON,并确保它看起来像您发送的内容?@GalacticCowboy这个想法太明显了,我可以用一根杆子砸自己……@GalacticCowboy不幸的是,结果完全不同-这将是一个很大的过程ng,在它起作用之前。我编辑我的问题。看看这个,它可能会帮助你。是MVC模型绑定器无法将你的列表正确绑定到Project Idea列表。此外,请确保你的模型中的字段名:ProjectDEA和你的JSon对象中的字段名是相同的。因此,你试图发送一个名值对集合,而不是JSon oJSON或活页夹不是这样工作的。
$(function () {
    $(".ButtonAddIdea").click(function () {
        var data = testFct();
        alert(data);
        $.ajax(
            {
                type: "POST",
                url: window.AddAnotherIdea,
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                data: data,
            }).done(function (html) {
                $("#IdeaList").replaceWith(html);
            });
    });
});

function testFct() {
    var list = $("#IdeaList :input")
    var test = list.serializeArray()
    things = JSON.stringify({ 'ideas': test });
    return things
}
[HttpPost]
public async Task<PartialViewResult> AddAnotherProjectIdea(List<ProjectIdea> ideas)
    {
    // gets called, and the List is not null - but the list appears to contain only
    // gibberish, with every value 0 or NULL. 
    //Also there are 5 elements, there should be only one
    }