11

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

{"ID":0,"RoutingRuleID":24,"ConditionalType":0,"Field":"Channel","ConditionalOperator":"5","Values":[1,9],"ValueString":""}

但最终发生的是,一旦 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
       }
    }

我的 MVC 控制器

    [HttpPost]
    public ActionResult EditConditional(RoutingConditional rcview)
    {
        //rcview.Values = null
    }

我的 Javascript

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

为什么它作为数组(列表)的空值传入?

4

2 回答 2

7

这是一个奇怪的问题,不确定我能否完全解释(有一个想法),但这就是我所做的。去掉了有效载荷中的所有 json 参数,除了"Values":[1,9]它,它工作得很好。

所以开始从最后开始添加每个 json 参数(幸运的是)。当我重新添加"ValueString":""它时,它又崩溃了。所以添加了一些更多的 json 参数来查看它是否是一个排序问题(例如,没有任何东西可以放在数组之后)。事实并非如此。

所以开始重命名东西,当我重命名"ValueString":""为类似的东西时,"TmpValueString":""它再次起作用。

这是我最好的猜测。单词 ValueString 具有与另一个属性的第一个字符匹配的名称片段。在这种情况下,“ values -tring”与“ values ”(数组名称)匹配,从而在 MVC 绑定器与您的对象模型匹配时将其丢弃。我不是 100% 的,但看起来就是这样。

所以你的解决方案是重命名你的一个道具,这样它的名字就不会构成另一个道具的第一个字符。

此外,想提及 ConditionalOperator 和 ConditionalType 名称来反驳任何论点。这些名称是独一无二的,因为它们不是彼此的子集,而只是包含相似的字符。而 Values 是 Valuestring 的一个子集,因此我认为是绑定混淆。

于 2013-10-24T23:39:26.863 回答
2

尝试设置“传统”选项

$.ajax({
        url: actionURL,
        type: "post",
        dataType: 'json',
        traditional: true,
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(myModel.RoutingConditional),
        ........standard success and error
        });
于 2013-10-24T17:38:20.877 回答