从ajax

时间:2017-05-10 16:59:52

标签: javascript jquery json ajax

我有这个javascript代码:

  var formData = new FormData($('#formSlip').get(0));
  formData.append('myList', JSON.stringify(tests)); 

其中tests是对象列表。我正在向我的控制器发送ajax post请求,并在该请求中发送文件和对象列表。

 $.ajax({
            url: url,
            type: 'post',
            data: formData,
            processData: false,
            contentType: false,
            cache: false,
            success://some code
        })

我在Chrome中使用Request Payload查看了我的DevTools,看起来像这样:

   Content-Disposition: form-data; name="firstPdf"; filename="blank.pdf"
    Content-Type: application/pdf

    Content-Disposition: form-data; name="myList"

    [{"key":"Section1","listTitles":["aaaa","aa","aa","a"]},
    {"key":"Section2","listTitles":["bb","b","bb","b"]}]

我正在我的控制器操作中检索文件,但由于某种原因,列表始终为空,这是我的控制器操作:

 [HttpPost]
    public ActionResult LS10(HttpPostedFileBase firstPdf, List<PdfPieceVM> myList)
    {            
        var t = firstPdf.InputStream;         
        byte[] pdfByte = new byte[firstPdf.ContentLength];
        return File(pdfByte, "application/pdf", firstPdf.FileName);
    }

我创建了一个ViewModel来获取该列表:

  public class PdfPieceVM
    {
        public string key { get; set; }
        public List<string> listTitles { get; set; }
    }

当我调试我的代码时,myList参数始终为空,但我收到了该文件,我需要做些什么来纠正这个问题?

1 个答案:

答案 0 :(得分:0)

阅读@Alex Menconi引用帖子,我更改了控制器操作以检索字符串,然后将其反序列化为我想要的类型:

    [HttpPost]
        public ActionResult LS10(HttpPostedFileBase firstPdf, string myList)
        {
            List<PdfPieceVM> pdfPieces = new 
         JavaScriptSerializer().Deserialize<List<PdfPieceVM>>(myList);            
        }