HttpPostedFileBase всегда возвращает null в ASP.NET MVC
У меня проблема при загрузке файла в ASP.NET MVC.
Мой код ниже:
Вид:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index2</h2>
@using (Html.BeginForm("FileUpload", "Board", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" />
<input type="submit" />
}
Контроллер:
[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase uploadFile)
{
if (uploadFile != null && uploadFile.ContentLength > 0)
{
string filePath = Path.Combine(Server.MapPath("/Temp"), Path.GetFileName(uploadFile.FileName));
uploadFile.SaveAs(filePath);
}
return View();
}
Но uploadFile всегда возвращает null.
Может ли кто-нибудь понять, почему?
Ответы
Ответ 1
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index2</h2>
@using (Html.BeginForm("FileUpload", "Board", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="uploadFile"/>
<input type="submit" />
}
вам нужно предоставить имя для ввода типа файла для uploadFile, чтобы смоделировать работу по связыванию в ASP.net mvc и также также убедиться, что имя вашего типа входного файла и имя аргумента HttpPostedFileBase
идентично.
Ответ 2
Я пробовал большинство решений, размещенных в Интернете для этой темы, но нашел, что лучше использовать обходной путь вместо этого.
На самом деле неважно, что я сделал HttpPostedFileBase и/или HttpPostedFile, всегда были нулевыми. Использование коллекции HttpContext.Request.Files, казалось, вообще не имело никаких проблем.
например.
if (HttpContext.Request.Files.AllKeys.Any())
{
// Get the uploaded image from the Files collection
var httpPostedFile = HttpContext.Request.Files[0];
if (httpPostedFile != null)
{
// Validate the uploaded image(optional)
// Get the complete file path
var fileSavePath =(HttpContext.Server.MapPath("~/UploadedFiles") + httpPostedFile.FileName.Substring(httpPostedFile.FileName.LastIndexOf(@"\")));
// Save the uploaded file to "UploadedFiles" folder
httpPostedFile.SaveAs(fileSavePath);
}
}
В приведенном выше примере я беру только первый файл, но это всего лишь вопрос цикла, хотя коллекция сохраняет все файлы.
HTH
Rob
Ответ 3
В моем сценарии проблема была с атрибутом id, у меня было это:
<input type="file" name="file1" id="file1" />
Душа должна была удалить id:
<input type="file" name="file1" />
Ответ 4
Также может быть и другой сценарий. В моем случае я получал эту проблему, потому что я был непосредственно рендерингом тега script в моем представлении MVC, и IE дает там проблему.
Правильный код должен выглядеть следующим образом:
@section scripts
{
<script>
$(document).ready(function () {
$('.fileinput').fileinput();
...
}
Ответ 5
В то время как не ответ на этот конкретный пользователь, я хотел бы указать, что HTML требует, чтобы тег формы имел атрибут enctype со значением multipart/form-data. И, конечно, оба атрибута и его значение должны быть правильными.
Для mvc это означает, что при использовании beginform вы должны использовать версию с параметром htmlAttributes