【发布时间】:2017-05-16 15:03:54
【问题描述】:
我有一个动态添加项目的表单,你只需要一个名字……我使用 KnockOut js html 看起来像这样:
<div data-bind="foreach: tmgs">
<i>Naam:</i>
<input type="text" required data-bind="value: name" /><br />
</div><br/>
<button class="btn btn-default" data-bind="click: addtmg">New item</button>
<ul data-bind="foreach: tmgs">
<li data-bind="text: name"></li>
</ul>
<button class="btn btn-success" id="Save">Save Item</button>
我使用的 JS 脚本是这样的:
var model = {
tmgs: ko.observableArray(),
addtmg: function () {
this.tmgs.push({ name: ko.observable() });
}
};
ko.applyBindings(model);
var json = ko.toJSON(model);
$("#Save").click(function (e) {
$.ajax({
url: "@Url.Action("AddItem")",
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(ko.toJS(model.tmgs)),
success: function (status) {
alert(status);
}
});
});
ASP 方法如下所示:
[HttpPost]
public JsonResult AddItem(List<string> tmgs)
{
if (tmgs == null)
{
return Json("False");
}
foreach (string item in tmgs)
{
if (!String.IsNullOrEmpty(item))
{
server.CreateItem(item);
}
}
return Json("True");
}
当我运行此代码时,该方法将收到一个列表,但 lst 仅包含 NULL 项。我也用过这个:
$("#Save").click(function (e) {
$.ajax({
url: "@Url.Action("AddItem")",
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: ko.toJSON(model).tmgs,
success: function (status) {
alert(status);
}
});
});
还有:
data: ko.toJSON(model.tmgs),
这次参数也不是列表,只是 NULL
我做错了什么?
@nemesv 工作的解决方案
[HttpPost]
public JsonResult AddItem(List<Tmg> tmgs)
{
...
}
public class Tmg
{
public string name { get; set; }
}
在这种情况下,使用data: ko.toJSON(model.tmgs), 发送数据应该可以正常工作。
【问题讨论】:
标签: c# asp.net ajax asp.net-mvc knockout.js