Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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# 向MVC控制器发送JSON字符串失败_C#_Json_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 向MVC控制器发送JSON字符串失败

C# 向MVC控制器发送JSON字符串失败,c#,json,asp.net-mvc,asp.net-mvc-4,C#,Json,Asp.net Mvc,Asp.net Mvc 4,我正在使用VS2015、C#,并试图将JSON数组传递给MVC控制器 我试图发送的JSON字符串是(我已经检查过它是有效的JSON): 我收到的错误是: [ArgumentException:无效的JSON原语:keysList。] 在客户机上,我的代码是: $('.do-remove').click(function (e) { e.preventDefault(); var keys = []; $("#tableUSNW tbody tr").each(functi

我正在使用VS2015、C#,并试图将JSON数组传递给MVC控制器

我试图发送的JSON字符串是(我已经检查过它是有效的JSON):

我收到的错误是:

[ArgumentException:无效的JSON原语:keysList。]

在客户机上,我的代码是:

$('.do-remove').click(function (e) {

      e.preventDefault();

  var keys = [];
  $("#tableUSNW tbody tr").each(function () {

    var row = $(this);
    var checked = $(row).find("td > input[id=inputChk]").is(":checked");

    if (checked === true) {

      var iUSER_KEY = $(row).attr("data-userkey");
      var iUSNW_KEY = $(row).attr("data-ref");
      var user = {iUSER_KEY: iUSER_KEY, iUSNW_KEY: iUSNW_KEY};
      keys.push(user);

      row.remove();
    }
  });

  keys = JSON.stringify(keys);

  $.ajax({
    type: "POST",
    url: '/newsinternal/UpdateUsnwRemove',
    traditional: true,
    contentType: "application/json; charset=utf-8",
    data: { keysList: keys },
    beforeSend: function () {
      $('#loader').show();
    },
    success: function (msg) {
      $('#loader').hide();          
    },
    error: function (xhr, ajaxOptions, thrownError) {
      $('#loader').hide();
      alert(xhr.responseText);
    }
  });
});
在服务器上(MVC控制器方法):

创建有效负载

$('.do-remove').click(function (e) {

  e.preventDefault();

  var keys = [];
  $("#tableUSNW tbody tr").each(function () {

    var row = $(this);
    var checked = $(row).find("td > input[id=inputChk]").is(":checked");

    if (checked === true) {

      var iUSER_KEY = $(row).attr("data-userkey");
      var iUSNW_KEY = $(row).attr("data-ref");
      var user = {iUSER_KEY: iUSER_KEY, iUSNW_KEY: iUSNW_KEY};
      keys.push(user);

      row.remove();
    }
  });


  var model = { keysList: keys };
  //..other code
在阿贾克斯监狱里,整件事都很棘手

...
data: JSON.stringify(model),
...

当您在ajax帖子中发送
数据:{keysList:keys}
时,这意味着服务器必须有一个具有
keysList
属性的对象


只需将
数据:{keysList:keys}
更改为
数据:keys

将变量keys更改为keysList。。。并设置数据:ajax调用中的键列表谢谢您的回答。是否可以添加一些其他参数,比如在方法调用中再添加两个整数?@FrenkyB您的意思是像
UpdateUsnwRemove(List keysList,int param1,int param2)
?是的,像这样。@FrenkyB当然可能。您的
数据
类似于
数据:{keysList:keys,param1:1,param2:2}
,但请记住,在这种情况下,参数名称很重要,并且它区分大小写,感谢您的回答。如果有几个参数,比如说两个以上的整数呢?在创建有效负载时包括它们<代码>变量模型={keysList:keys,param1:1,param2:2}您应该考虑更新操作,以将具有参数的复杂对象模型作为属性,因为您只能从请求的正文中使用一个参数。
public class DTO_CAUSNW
{
    public int? iUSNW_KEY { get; set; } //user_news key 
    public string cUSNW_STA { get; set; } //status: 1=enable, 2/null=disable, 9=erased 
    public string cUSNW_SRT { get; set; } //sort: 1=internal news
    public DateTime? dUSNW_DAT { get; set; } //date of changed status

    public int? iNEWS_KEY { get; set; } //news key
    public int? iUSER_KEY { get; set; } //user key 

    public DateTime? dUSNW_DSI { get; set; } //time of signature
    public DateTime? dUSNW_DAU { get; set; } //time of user changed  
    public string cUSNW_STU { get; set; } //user status: 1=confirm, 2/null=not confirm
    public int? iUSNW_CPU { get; set; } //counter of postponed
    public string cUSNW_COM { get; set; } //comment
    public string cUSNW_NTO { get; set; } //note

    public DTO_CANEWS oNEWS { get; set; } //the news
    public DTO_BAUSER oUSER { get; set; } //the user
}
$('.do-remove').click(function (e) {

  e.preventDefault();

  var keys = [];
  $("#tableUSNW tbody tr").each(function () {

    var row = $(this);
    var checked = $(row).find("td > input[id=inputChk]").is(":checked");

    if (checked === true) {

      var iUSER_KEY = $(row).attr("data-userkey");
      var iUSNW_KEY = $(row).attr("data-ref");
      var user = {iUSER_KEY: iUSER_KEY, iUSNW_KEY: iUSNW_KEY};
      keys.push(user);

      row.remove();
    }
  });


  var model = { keysList: keys };
  //..other code
...
data: JSON.stringify(model),
...