在模型绑定期间丢失我的Byte数组的所有数据在asp.net mvc中

时间:2014-07-17 20:18:55

标签: c# asp.net-mvc

我正在努力将文件附加到我正在构建的消息系统中,我们正在使用Kendo浏览器来获取文件及其上传方法。我遇到的问题是,当我成功上传要作为附件模型发送的文件,并将其传递回发送消息的服务时,我将丢失保存字节数组和mime的模型的Data属性类型。

  1. 页面绑定到具有消息模型和附件模型的宽体视图模型
  2. 视图模型传递给mvc控制器发送方法,该方法采用消息模型和可选附件模型
  3. 附件模型有两个属性,mime类型和Data属性,类型为byte []
  4. 安全邮件模型上有一个属性,它是一个附件列表,它是IList类型
  5. 这是我执行kendo-Uploader魔法的控制器动作

     public ActionResult SaveDocumentFile(HttpPostedFileBase DocumentFile)
        {
                AttachmentModel attachmentModel = new AttachmentModel();
            attachmentModel.DocumentFile = new DocumentFileModel();
            attachmentModel.DocumentFile.Data = FileManager.GetFileData(DocumentFile);
            attachmentModel.DocumentFile.MimeType = DocumentFile.ContentType;
            attachmentModel.FileName = DocumentFile.FileName;
            return Json(attachmentModel);
        }
    

    这将获取文件选择的结果,并将其作为附件模型发送回客户端,并将其填充到视图模型中。

    以下是发送我的消息的我的控制器操作

            public ActionResult SendMessage(SecureMessageViewModel messageView)
        {
            if (messageView == null)
                messageView = new SecureMessageViewModel();
            if (messageView.SecureMessage == null)
                messageView.SecureMessage = new SecureMessageModel();
            if(messageView.Attachment == null)
                messageView.Attachment = new AttachmentModel();
            if (messageView.Attachment.DocumentFile == null)
                messageView.Attachment.DocumentFile = new DocumentFileModel();
    
            IList<AttachmentModel> attachmentList = new List<AttachmentModel>();
            attachmentList.Add(messageView.Attachment);
            return Json(staffMessagingService.SendMessage(messageView.SecureMessage, attachmentList), JsonRequestBehavior.AllowGet);
        }
    

    这会将安全消息模型和附件模型传递给服务层,因为服务层检查Data(Attachment模型上的属性)并在没有数据的情况下抛出异常,服务层就是崩溃的地方,在这种情况下没有,即使它出现在html-&gt; Angular-&gt;到HTTP流中。然后它进入虚空。

    当我在客户端上使用save方法时,我看到我的视图模型中的附件模型加载了mime类型和字节数组。   当我在控制器上打破发送消息视图时,附件具有mime类型但没有数据。   我在调试器中调用了一个请求,可以看到http流中的数组,但是我的模型没有绑定到它。

    有没有人遇到过类似的问题?如果是这样,问题是什么,到目前为止谷歌一直没有帮助。

1 个答案:

答案 0 :(得分:0)

我有一种感觉这不是最好的解决方案,但我确实找到了解决办法,我在附件模型中添加了一个字符串属性,并将字节数组转换为字符串,然后再将其发送回客户端。然后我将它转换回send方法中的数组,然后再将其推送到服务器。这让我超越了我的数组没有绑定到我的模型的事实。 我用来转换的方法是HttpServerUtility.UrlTokenDecode和编码方法。