Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net中将ko.observable数组获取到服务器端_C#_Asp.net Mvc_Jquery_Knockout.js - Fatal编程技术网

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

C# 在asp.net中将ko.observable数组获取到服务器端,c#,asp.net-mvc,jquery,knockout.js,C#,Asp.net Mvc,Jquery,Knockout.js,下面我有一个ajax调用,它将发布一篇文章,提供以下数据 self.present_conditions=“[{”镇“:“12”,“范围“:“21”,“区段“:“111”,“英亩“:“19”)” 我希望在下面的操作结果中在服务器端接收此数据,但我总是以空值结束 [HttpPost] public ActionResult PBHEP(string[] data) { return View(); } 我应该在这里做些什么才能将该阵列放到服务器端 提前谢谢

下面我有一个ajax调用,它将发布一篇文章,提供以下数据

self.present_conditions=“[{”镇“:“12”,“范围“:“21”,“区段“:“111”,“英亩“:“19”)”

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

[HttpPost]
    public ActionResult PBHEP(string[] data)
    {
        return View();
    }
我应该在这里做些什么才能将该阵列放到服务器端


提前谢谢。

您发送一个对象数组(或设置一个键值对),服务器需要一个字符串数组

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


我希望它有帮助。

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


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

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

这些字段应填充来自所发送阵列的匹配数据。希望这能有所帮助。

我也遇到了同样的问题,然后我通过将数组作为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);
公共JsonResult操作方法(字符串IDSSON) { 列表ID=JsonConvert.DeserializeObject (json);
下面是我最终放弃使用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);
    }
[HttpPost]
公共操作结果PBHEP(字符串PC、字符串FC)
{
JavaScriptSerializer ser=新的JavaScriptSerializer();
列出PC_行=序列反序列化(PC);
列出FC_行=序列反序列化(FC);
}
希望这能帮助一些人。
谢谢大家的帮助。

.done()
并不意味着数据已保存…如果引发异常或连接丢失怎么办?您是否尝试过使用fiddler查看您的帖子中传递的内容?我不熟悉fiddler我在chrome开发工具中调试过,并看到“数据”具有该值除了Fiddler2外,还可以查看Spile以查看服务器上发生的情况。我相信您不会发送任何aspnetmvc认为是字符串数组的内容,您可以使用Spile来查看路由。这两种工具都值得投入时间。无论我尝试什么参数,我总是有一个空值。很抱歉,我尝试使用字典,但仍然没有有一个空值我仍然看到表单数据是[{“town”:“23”,“Range”:“23”,“Section”:“23”,“Acres”:“23”}]:但是每个字段仍然有空值,只是在我将字符串字符串字符串字符串化后更仔细地看了看。除了字符串周围的括号外,它是相同的。我看到的唯一的其他区别是在另一个答案中提到的(向ajax调用添加数据类型:“json”)。我不确定如何创建字符串。我像json.stringify({town:$('#town').val())一样构建我的字符串。我拥有的数据是UI表中的一行,所有行都在一个ko.observable数组中,正如我在self.present_conditions()代码中提到的那样就是这个数组,当我在dev工具中检查我的头时,我看到这是作为var data=ko.toJSON(self.present_conditions())的请求响应传递的;正如我前面提到的,当我进一步使用JSON.stringify(data)时,它只会将“”添加到整个字符串中,但即使在我使用string[]时,它们都不会在控制器中检索到或者字典或字符串。我没有主意:(.我刚刚搜索了向控制器发送数组并找到下面的链接,他们建议设置jQuery.ajaxSettings.traditional=true。祝你好运!我没有尝试过,但我解决了它。谢谢你的建议
    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);
    }