Asp.net 为什么文件上传不绑定到我的viewmodel?

Asp.net 为什么文件上传不绑定到我的viewmodel?,asp.net,asp.net-mvc,file-upload,viewmodel,model-binding,Asp.net,Asp.net Mvc,File Upload,Viewmodel,Model Binding,我正在尝试将文件上载绑定到ViewModel,如中所示 但我无法将文件绑定到ViewModel上的“文件”属性 请参阅下面的代码。我做错了什么 为清晰起见进行编辑-我希望上传绑定到VM,而不是将其作为操作参数 视图模型 行动 请求有效载荷 如果希望能够上载文件,请首先确保已将表单上的enctype属性设置为表单上的多部分/表单数据: 您可以在post action参数中访问上传的文件 [HttpPost] public async Task<ActionResult> Upload(

我正在尝试将文件上载绑定到ViewModel,如中所示

但我无法将文件绑定到ViewModel上的“文件”属性

请参阅下面的代码。我做错了什么

为清晰起见进行编辑-我希望上传绑定到VM,而不是将其作为操作参数

视图模型

行动

请求有效载荷


如果希望能够上载文件,请首先确保已将表单上的enctype属性设置为表单上的多部分/表单数据:

您可以在post action参数中访问上传的文件

[HttpPost]
public async Task<ActionResult> Upload(PrimaryImageUploadViewModel postedModel, HttpPostedFileBase file)
{
    if (file.ContentLength > 0)  
    {  
        string _FileName = Path.GetFileName(file.FileName);  
        string _path = Path.Combine(Server.MapPath("~/UploadedFilesFolder"), _FileName);  
        file.SaveAs(_path);  
    }            
}

希望这有帮助…

您能发布视图吗?视图只是一个文件输入。我使用blueimp文件上传器通过ajax上传图像。它发送如上所示的请求负载。请求负载名称是files[],但您的模型名称是files。我认为这是由于名称不匹配造成的。请求负载中的files[]不应该绑定到postedModel.files吗?我尝试了相同的方法,问题出在名称上。我将我的页面中的多个文件发布到它工作的操作方法感谢您的帮助!理想情况下,我希望上传的文件成为postedModel的一部分,而不是作为操作的单独参数。是的,它以多部分/表单数据的形式发布。是的。这让我意识到我看错了问题。名称本身是带方括号的files[]。当我以为它是一个文件数组时。非常感谢你。我感谢你的帮助和坚持。
[HttpPost]
public async Task<ActionResult> Upload(PrimaryImageUploadViewModel postedModel)
{
    var requestFiles = postedModel.Files;  // THIS VALUE IS NULL - WHY?
    foreach (var f in requestFiles)
    {
        if (f.ContentLength == 0)
        {
            // do stuff
        }

    }
}
Accept:*/*
Content-Disposition:attachment; filename="MyImage.png"
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryEj8zSF9hwGU3ZQA9
Origin:http://localhost:52588
Referer:http://localhost:52588/example/edit/1
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
X-Requested-With:XMLHttpRequest
------WebKitFormBoundaryEj8zSF9hwGU3ZQA9
Content-Disposition: form-data; name="Title"

Some Test Title
------WebKitFormBoundaryEj8zSF9hwGU3ZQA9
Content-Disposition: form-data; name="files[]"; filename="MyImage.png"
Content-Type: image/png


------WebKitFormBoundaryEj8zSF9hwGU3ZQA9--
[HttpPost]
public async Task<ActionResult> Upload(PrimaryImageUploadViewModel postedModel, HttpPostedFileBase file)
{
    if (file.ContentLength > 0)  
    {  
        string _FileName = Path.GetFileName(file.FileName);  
        string _path = Path.Combine(Server.MapPath("~/UploadedFilesFolder"), _FileName);  
        file.SaveAs(_path);  
    }            
}
 public class Model1
    {
        public HttpPostedFileBase[] Files { get; set; }
        public string Title { get; set; }
    }