mvc upload file with model - second parameter posted file is null
asp.net, asp.net-mvc, asp.net-mvc-3, c#, razor
Solution
Why not add the uploaded files to your model like this:
public class UploadFileModel
{
public UploadFileModel()
{
Files = new List<HttpPostedFileBase>();
}
public List<HttpPostedFileBase> Files { get; set; }
public string FirstName { get; set; }
// Rest of model details
}
Then change your view to this:
@using (Html.BeginForm("UploadFile", "Home", FormMethod.Post, new { encType="multipart/form-data" }))
{
@Html.TextBoxFor(m => m.FirstName)
<br /><br />
@Html.TextBoxFor(m => m.Files, new { type = "file", name = "Files" })<br /><br />
<input type="submit" value="submit me" name="submitme" id="submitme" />
}
Then your files will be posted back as follows:
public ActionResult UploadFile(UploadFileModel model)
{
var file = model.Files[0];
return View(model);
}
Problem
I have a simple model with 1 string property which I render on a simple view. the view looks like the following: ``` @using (Html.BeginForm("UploadFile", "Home", FormMethod.Post, new { encType="multipart/form-data" })) { @Html.TextBoxFor(m => m.FirstName) <br /><br /> <input type="file" name="fileUpload" /><br /><br /> <input type="submit" value="submit me" name="submitme" id="submitme" /> } ``` Controller is this: ``` [HttpPost] public ActionResult UploadFile(UploadFileModel model, HttpPostedFileBase file) { // DO Stuff return View(model); } ``` Now, when I submit, the model DOES get populated but the second parameter being HttpPostedFileBase is null. However when doing Request.Files - it does seem to show there is a file in the Request being posted. How can I actually get the second parameter to bind?