【问题标题】:Web Api Post from KnockoutJs ViewModel来自 KnockoutJs ViewModel 的 Web Api Post
【发布时间】:2012-12-02 22:16:54
【问题描述】:

我没有在 web api post 上找到太多信息。这是我发现的一篇博客文章,其中讨论了如何从淘汰赛中进行 POST。 Web Api POST with KnockoutJs ViewModel

视图模型:

<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());

数据控制器(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 的经验吗?

【问题讨论】:

    标签: asp.net knockout.js asp.net-web-api


    【解决方案1】:

    问题是您发送的是 ViewModel,而不是对象数组:

    var items = ko.toJSON(self);
    

    这会将整个 ViewModel 对象转换为 JSON。尝试只转换数组:

    var items = ko.toJSON(self.quickEntries);
    

    【讨论】:

    • ko.toJSON(self.quickEntries);这没有用。提琴手返回 500 错误。原来我需要重命名我的 json 类。
    • 我错过了——有时很难看到这些东西!有时,外壳也可以用 AJAX 把你逼疯 :-)
    【解决方案2】:

    原来我需要重命名我的班级。

    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; }
    }
    

    【讨论】:

      【解决方案3】:

      以下不是直接的答案 - 而是一些有用的链接,用于将 Knockout 与 Web API 结合使用(虽然我还没有尝试使用 Knockout 进行开发,但这些文章提供了丰富的信息)

      1. Single-Page Applications: Build Modern, Responsive Web Apps with ASP.NET
      2. KNOCKOUTJS AND WEBAPI TRICKS ARE FOR POCO, KIDS.
      3. Single Page Application: KnockoutJS template
      4. Using AngularJS to send parameters to Web API

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 2013-11-14
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 2012-07-09
        • 2021-03-12
        相关资源
        最近更新 更多