Javascript jQueryAjax到MVC会产生意想不到的结果
我正试图通过Ajax向我的acton发送一个列表。此时,我正在为我的操作获取数据,但是修改的数据是胡言乱语,例如evrything为NULL,并且有5个元素,而不是一个。 我需要通过jquery收集数据,因为我想动态扩展这个列表 我想根本问题在于我的JSON与我的操作所期望的JSON有所不同——但我对这一点还不熟悉,没有看到错误。发送到操作的JSON如下所示: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",
{
"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
}