在asp.net中将ko.observable数组获取到服务器端

时间:2013-09-11 15:56:27

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

我在下面有一个ajax调用,它将执行POST以提供以下数据

self.present_conditions =“[{”Township“:”12“,”Range“:”21“,”Section“:”111“,”Acres“:”19“}]”

    var data = ko.toJSON(self.present_conditions());
    $.ajax({
        type: "POST",
        url: "/Home/PBHEP",
        contentType: "application/json; charset=utf-8",
        data: data
    }).done(function () {
        alert("Data Saved");
    });

我希望在下面的操作结果中在我的服务器端接收此数据,但我总是以null值结束。

[HttpPost]
    public ActionResult PBHEP(string[] data)
    {
        return View();
    }

我应该怎么做才能将该阵列放到服务器端。

提前谢谢。

5 个答案:

答案 0 :(得分:0)

发送一个对象数组(或设置一个键值对),服务器需要一个String数组。

因此,尝试将服务器方法的类型参数更改为Dictionary []或dynamic。

我希望它有所帮助。

答案 1 :(得分:0)

您发送键值数组对象但在控制器的操作中接收字符串数组: 1)如Damien所述,您需要将输入参数更改为Dictionary 2)您需要更改发布请求并添加数据类型:“json”

var data = ko.toJSON(self.present_conditions());
$.ajax({
    type: "POST",
    url: "/Home/PBHEP",
    datatype: "json",
    contentType: "application/json; charset=utf-8",
    data: data
}).done(function () {
    alert("Data Saved");
});

答案 2 :(得分:0)

根据我的经验,当我对数组进行字符串化时,它具有与present_conditions相同的格式,但我在服务器端收到的不是数组而是单个字段。如果您将控制器更改为

[HttpPost]
public ActionResult PBHEP( string Township, string Range, string Section, string Acres)
{
    return View();
}

应使用发送的数组中的匹配数据填充这些字段。希望这会有所帮助。

答案 3 :(得分:0)

我遇到了同样的问题,然后通过将数组作为JSON序列化字符串传递来修复它。

$.ajax({
    type: 'GET',
    url: '/Controller/ActionMethod/',
    data: { idsJSON: ko.toJSON(ids) },

从服务器端,我收到它以反序列化数组

public JsonResult ActionMethod(string idsJSON)
{
    List<long> ids = JsonConvert.DeserializeObject
        <List<long>>(idsJSON);

答案 4 :(得分:0)

所以发生了什么我终于放弃了用ajax做帖子而且我使用了一个简单的jquery帖子,现在我能够在我的控制器中获取值

<强> JS:

    self.submit_conditions = function () {
    var PC_data = ko.toJSON(self.present_conditions());
    var FC_data = ko.toJSON(self.future_conditions());

    $.post("/Home/PBHEP", { "PC": PC_data, "FC": FC_data});
}

<强>控制器

 [HttpPost]
    public ActionResult PBHEP(string PC,string FC)
    {
        JavaScriptSerializer ser = new JavaScriptSerializer();
        List<Conditions> PC_rows = ser.Deserialize<List<Conditions>>(PC);
        List<Conditions> FC_rows = ser.Deserialize<List<Conditions>>(FC);
    }

希望这对某人有所帮助。 谢谢大家的帮助。