2017-01-02 72 views
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),數據應該能正常運行。

回答

1

有和數據控制器參數之間的不匹配是一個0​​您發送什麼這與包含數據的name屬性的對象的列表。

所以,你需要發送一個字符串數組以獲取每個TMG的name屬性:

data: JSON.stringify(model.tmgs().map(function(item) { return item.name() })), 

或者你需要改變你的控制器採取TMG對象的列表:

[HttpPost] 
public JsonResult AddItem(List<Tmg> tmgs) 
{ 
    ... 
} 

public class Tmg 
{ 
    public string name { get; set; } 
} 

在這種情況下,使用data: ko.toJSON(model.tmgs),發送數據應該可以正常工作。

+0

第二個解決方案似乎工作,第一個仍然給我一個空值的列表......但感謝它現在的作品:) – Ferryzijl

+1

@Ferryzijl是的,你是對的我沒有注意到,'名稱'是也是可觀察的,我錯過了'map'中的'()'。所以這應該工作:'數據:JSON.stringify(model.tmgs()。map(函數(item){return item.name()})),' – nemesv

+0

Jep,這很好!謝謝 – Ferryzijl