Asp.net 为什么文件上传不绑定到我的viewmodel?
我正在尝试将文件上载绑定到ViewModel,如中所示 但我无法将文件绑定到ViewModel上的“文件”属性 请参阅下面的代码。我做错了什么 为清晰起见进行编辑-我希望上传绑定到VM,而不是将其作为操作参数 视图模型 行动 请求有效载荷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(
如果希望能够上载文件,请首先确保已将表单上的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; }
}