【问题标题】:Knockoutjs observable array to List<string>Knockoutjs 可观察数组到 List<string>
【发布时间】:2013-05-23 09:15:27
【问题描述】:

我搜索了高低,并尝试了许多不同的选项,但无法弄清楚这里出了什么问题。

我有一个 knockoutjs 视图模型,如下所示:

{"Id":0,"Type":"post","Title":"adsf","AuthorId":0,"Description":"adsfadsf","ChosenCategoryValues":["7","8","9"]}

(为简洁起见省略了一些字段)

除了 ChosenCategoryValues 之外,所有内容都可以很好地传递回控制器。这是客户端的 observableArray,服务器端的 List&lt;string&gt;。它总是返回 null,除非字符串包含第一项中的所有值,然后我必须对其进行字符串解析。

$.post("/serverurl", viewmodel, function (response) { do some stuff }, "json"); 是它被发送到服务器的方式。

我试过 ko.toJS 让它成为一个简单的数组,但没有结果。

我确信这是一些基本的东西,我是 knockoutjs 的新手,但我已经在这方面太久了,我在网上找到的建议都没有帮助。

【问题讨论】:

  • 尝试在页面加载方法中在$.pos 之前调用$.ajaxSetup({ traditional: true });
  • 你用fiddler查看请求了吗?是在请求中传输实际的 json,还是将值作为 http 表单值传递?

标签: c# asp.net-mvc-4 knockout.js


【解决方案1】:

为了发送视图模型数据,您应该将视图模型数据转换为 JSON(请记住 - 可观察对象是简单的函数),这是通过调用 ko.toJSON() 函数来实现的。

您还需要告诉服务器,您正在发送 JSON 数据。使用 jQuery post() 方法无法实现 - dataType 参数仅影响预期的服务器响应类型,但不影响请求内容类型。所以,只需使用 jQuery ajax() 方法:

$.ajax({
    url: '/serverurl',
    type: 'POST',
    data: ko.toJSON(viewmodel),
    contentType: 'application/json',
    success: function(response) {
        // do some stuff
    }
});

【讨论】:

    【解决方案2】:

    正如我在上面评论的,您应该使用fiddler 来查看请求。我怀疑您的数据没有以 json 格式发送。当您的值作为普通 html post 值发送时,通常不会映射集合。

    我建议使用JSON.stringify 创建要发送到服务器的实际 json,如下所示:

    $.post("/serverurl", JSON.stringify(viewmodel), function (response) { do some stuff }, "json");
    

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 2014-07-06
      • 2017-11-25
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 2018-08-04
      • 2013-12-16
      • 2015-11-30
      相关资源
      最近更新 更多