我在VS 2015中使用ASP.NET 5,MVC 6.我正在制作一个Web应用程序。在我的表格上,我有:
<form method="post" enctype="multipart/form-data">
<div id="uploadSection" >
<label >Select files for upload</label>
<input type="file" id="fileSelect" name="fileSelect" multiple />
</div>
<div>
<input type="submit" id="thisbutton" value="button" />
</div>
</form>
在我的控制器中:
[HttpPost]
public async Task<IActionResult> FileForm(FileViewModel vm, IFormFile file)
{
if (ModelState.IsValid)
{
//IFormFileCollection files = Request.Form.Files;
string filePath = Path.Combine("C:", "transfers");
//foreach (var file in files)
//{
if (file != null && file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
await file.SaveAsAsync(Path.Combine(filePath, fileName));
}
//}
ModelState.Clear();
}
return View();
}
我有一个更大的表单,其中有母表单字段,它进入我的FormViewModel(所有字段都填充它们应该),我实际上尝试将IFormFileCollection,ICollection,IList,List作为方法中的参数以上,而是直接将它放在我的视图模型中。无论我是作为单个文件还是多个文件,在模型或控制器中,我总是得到null。 &#39; IFormFileCollecion文件= Request.Form.Files&#39;实际上是有效的,但我不想这样做,因为它应该按我拥有或拥有它的方式工作。 当我把文件的属性放在我的模型中时,我把&#34; [必需]&#34;在它之上它并没有触发。
而且,更好的是,我用fiddler多次运行它,它实际上是在发布文件 - 所以为什么它们不会被投射到模型中?
我的依赖项是否有误?任何人都可以想到会导致这种情况的原因吗?
"dependencies": {
"Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
"Microsoft.AspNet.Http": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"
},
答案 0 :(得分:60)
您的文件输入的名称属性为&#34; fileSelect&#34;。您的操作参数的名称是&#34; file&#34;。让它们匹配,它应该工作。
答案 1 :(得分:0)
听起来可能很简单!但除了相同的//name// @model-view-controller
外,还要检查form.serialize();
使我24小时才能找到它!