模型中的MVC控制器列表没有绑定

时间:2018-01-05 12:58:50

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

我的MVC控制器中有一个动作

public FileStreamResult CustomerOrdersAsExcel(ExcelColumn column)

ExcelColumn模型:

public class ExcelColumn
{
    public string Header { get; set; }

    public List<EnumLocalized> EnumLocalizations { get; set; }
}

然后我使用ajax传递我的ExcelColumn

let ajaxSettings = {
    type: 'GET',
    xhrFields: { responseType: 'blob' },
    data: column,
    contentType: 'application/json; charset=utf-8',
    success: (data) => {
        ... on success
        }
    }
};

列是具有

的对象
"{"header":"Order type",
  "enumLocalizations":[ 
   {  
      "key":1,
      "value":"Customer order"
   },
   {  
      "key":2,
      "value":"Webshop"
   },
   {  
      "key":4,
      "value":"Service order"
   }
]}"

现在,当我在控制器中接收数据时,Header绑定正常,但EnumLocalizations不是。 它有3个元素,其中每个元素都填充了默认值Key = 0和Value = null。 我已经尝试过JSON.stringfy这个并使用传统的:对于jquery设置是true但是这两个都没有用。 你知道什么可能导致绑定失败吗?

更新: 我认为错误是由jquery发送的格式

header:Order type
enumLocalizations[0][key]:1
enumLocalizations[0][value]:Customer order
enumLocalizations[1][key]:2
enumLocalizations[1][value]:Webshop
enumLocalizations[2][key]:4
enumLocalizations[2][value]:Service order

我认为它应该像

header:Order type
enumLocalizations[0].key:1
enumLocalizations[0].value:Customer order
enumLocalizations[1].key:2
enumLocalizations[1].value:Webshop
enumLocalizations[2].key:4
enumLocalizations[2].value:Service order

你知道我怎么改变它?

2 个答案:

答案 0 :(得分:2)

您无法使用GET发送大量数据,请改用POST GET将通过网址(which is limited to about 2000 characters depending on the browser

发送所有数据
let ajaxSettings = {
    type: 'POST',
    xhrFields: { responseType: 'blob' },

    dataType: 'json',

    contentType: 'application/json; charset=utf-8',
    success: (data) => {
        ... on success
        }
    }
};

答案 1 :(得分:2)

像@Dabbas所说,将ajax方法更改为POST以发送大数据(最大网址长度为255个字符),并且不使用JSON绑定数据,这不是必需的。

试试看,如果不起作用,我会删除:

var obj = {
    "header":"Order type",
    "enumLocalizations":[ 
         {  
          "key":1,
          "value":"Customer order"
         },
         {  
          "key":2,
          "value":"Webshop"
         },
         {  
          "key":4,
          "value":"Service order"
         }
    ]
};

let ajaxSettings = {
    type: 'POST',
    xhrFields: { responseType: 'blob' },
    data: obj,
    success: (data) => {
        ... on success
        }
    }
};