mvc upload file with model - second parameter posted file is null

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?

Last updated:12/10/2014 5:44:12 AM

1 Answers

Anonymous User
Anonymous User

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.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);
}

Answer