发布到mvc actionresult时,Json数组对象始终为空

Dan*_*can 10 javascript c# asp.net-mvc json asp.net-mvc-4

我的原始json字符串通过AJAX post传递给MVC ActionResult控制器

{"ID":0,"RoutingRuleID":24,"ConditionalType":0,"Field":"Channel","ConditionalOperator":"5","Values":[1,9],"ValueString":""}
Run Code Online (Sandbox Code Playgroud)

但最终发生的事情是,一旦json对象进入MVC控制器,它就会丢失关联数组"值"中的值.其他属性设置正确.

我在C#中的模型类如下:

    public class RoutingConditional 
    {
      public int ID { get; set; }
      public int ParentID { get; set; }

      public string ConditionalType { get; set; }

      public string Field { get; set; }

      public string ConditionalOperator { get; set; }

      public List<string> Values { get; set; }
      public string ValueString{get;set;}
      public RoutingConditional()
      {
        //this.Values = new List<string>(); //I tried to initialize it too did not work
       }
    }
Run Code Online (Sandbox Code Playgroud)

我的MVC控制器

    [HttpPost]
    public ActionResult EditConditional(RoutingConditional rcview)
    {
        //rcview.Values = null
    }
Run Code Online (Sandbox Code Playgroud)

我的Javascript

     $.ajax({
        url: actionURL,
        type: "post",
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(myModel.RoutingConditional),
        ........standard success and error
        });
Run Code Online (Sandbox Code Playgroud)

为什么它被传入null为数组(List)?

TSm*_*ith 6

这是一个奇怪的,不确定我可以完全解释(有一个想法),但这就是我做的.删除了有效负载中的所有json参数,除了"Values":[1,9]它并且工作得很好.

所以开始从最后开始添加每个json参数(幸运的是).当我重新添加"ValueString":""它时再次被淘汰.所以添加了一些更多的json参数,看看它是否是一个排序问题(例如,没有任何东西可以在数组之后).情况并非如此.

所以开始重命名的东西,当我重命名"ValueString":""为类似的东西"TmpValueString":""再次工作.

这是我最好的猜测.ValueString这个单词的名称与第一个字符的另一个属性相匹配.在这个实例中," values -tring"与" values "(数组名称)匹配,从而在与对象模型匹配时抛出MVC活页夹.我不是百分之百,但这就是它的样子.

所以你的解决方案是重命名你的一个道具,使它的名字不构成另一个道具的第一个角色.

另外,想提及ConditionalOperator和ConditionalType名称来反驳任何参数.这些名称的独特之处在于它们不是彼此的子集,而只是包含相同的字符.而值是Valuestring的一个子集,因此我认为这会引起混淆.