3

Web APIの投稿に関する情報はあまり見つかりませんでした。これは、ノックアウトから POST を実行する方法について話している 1 つのブログ エントリです。KnockoutJs ViewModel を使用した Web Api POST

ビューモデル:

<script type="text/javascript">

var QuickEntry = function (_itemPartNumb, _itemDescription, _itemQuanities) {
    this.ItemPartNumb = ko.observable(_itemPartNumb);
    this.ItemDescription = ko.observable(_itemDescription);
    this.ItemQuanties = ko.observable(_itemQuanities);
};

function QuickEntriesViewModel() {

    var self = this;
    self.quickEntries = ko.observableArray([]);

    for (var i = 0; i < 10; i++) {
        self.quickEntries.push(new QuickEntry());            
    }

    self.addNewRow = function () {
        self.quickEntries.push(new QuickEntry());            
    }.bind(self);

    self.addToCart = function() {
        var items = ko.toJSON(self);

        $.ajax({
            url: '/DesktopModules/blah/API/Data/Post',
            type: 'POST',
            data: items,
            datatype: "json",
            processData: false,
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                alert(data);
            },
            statusCode: {
                404: function () {
                    alert('Failed');
                }
            }
        });
    };
};

ko.applyBindings(new QuickEntriesViewModel());

DataController (Web API)

[HttpPost]
public string Post(quickEntries values)
{
    string response = string.Empty;
    response = values.Items != null ? "some data" : "nothing at all";

    return response;
}

//class
public class quickEntries
{
    public MyQuickEntry[] Items { get; set; }
}

public class MyQuickEntry
{
    public string ItemPartNumb { get; set; }
    public string ItemDescription { get; set; }
    public string ItemQuanties { get; set; }
}

これは、フィドラーから Web API POST メソッドに渡されるものです。

{"quickEntries":[{"ItemPartNumb":"bob","ItemDescription":"bob","ItemQuanties":"bob"},{},{},{},{},{},{}, {},{},{}]}

json オブジェクトの配列を Web API に渡す経験がある人はいますか?

4

3 に答える 3

2

問題は、オブジェクトの配列ではなく、ViewModel を送信していることです。

var items = ko.toJSON(self);

これにより、ViewModel オブジェクト全体が JSON に変換されます。配列だけを変換してみてください:

var items = ko.toJSON(self.quickEntries);
于 2012-12-15T14:07:08.203 に答える
0

以下は直接的な回答ではありませんが、Web API でノックアウトを使用するための便利なリンクがいくつかあります (ノックアウトでの開発はまだ試していませんが、記事は有益です)。

  1. シングルページ アプリケーション: ASP.NET を使用して最新のレスポンシブ Web アプリを構築する
  2. KNOCKOUTJS と WEBAPI TRICKS は POCO、KIDS 向けです。
  3. 単一ページ アプリケーション: KnockoutJS テンプレート
  4. AngularJS を使用してパラメーターを Web API に送信する
于 2014-07-31T04:04:36.040 に答える
0

クラスの名前を変更する必要があることがわかりました。

public class RootObject
{
    public List<QuickEntry> quickEntries { get; set; }
}

public class QuickEntry
{
    public string ItemPartNumb { get; set; }
    public string ItemDescription { get; set; }
    public string ItemQuanties { get; set; }
}
于 2012-12-17T16:22:27.193 に答える