2
我有一個表格,以動態地添加項目,你只需要一個名字......我用淘汰賽的js它 的HTML如下:Ajax調用ASP POST方法不斷給空參數
<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),
這一次的參數不是一個列表或者是隻是空
我在做什麼錯? @nemesv的
解決方案工程
[HttpPost]
public JsonResult AddItem(List<Tmg> tmgs)
{
...
}
public class Tmg
{
public string name { get; set; }
}
在這種情況下發送帶有data: ko.toJSON(model.tmgs),
數據應該能正常運行。
第二個解決方案似乎工作,第一個仍然給我一個空值的列表......但感謝它現在的作品:) – Ferryzijl
@Ferryzijl是的,你是對的我沒有注意到,'名稱'是也是可觀察的,我錯過了'map'中的'()'。所以這應該工作:'數據:JSON.stringify(model.tmgs()。map(函數(item){return item.name()})),' – nemesv
Jep,這很好!謝謝 – Ferryzijl