Почему IFormFile показывает null и как его исправить?
Я использую ASP.NET 5, MVC 6 в VS 2015. Я делаю веб-приложение. На моем бланке:
<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. 'Iformfilecollecion файлы = запрос.Форма.Файлы на самом деле работают, но я не хочу делать это таким образом, потому что это должно работать так, как у меня есть или было. Когда я помещаю свойство для файлов в свою модель, я помещаю "[требуется]" над ним, и он не запускается.
и, что еще лучше, я запускал это несколько раз с 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"
},
1 ответов
ваш входной файл имеет атрибут имени "fileSelect". Имя параметра вашего действия - "файл". Сделайте их совпадающими, и это должно сработать.