I have a form where a user can upload a file to the sites download section. However when the form is submitted I get this error, without the request ever making it to the action method.
“The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters.”
Code:
[HttpPost]
[Authorize]
public ActionResult Create(Download dl, HttpPostedFileBase DownloadFile)
{
And
@model Models.Download
@{
ViewBag.Title = "Add Download";
}
<h3>Add Download</h3>
@using (Html.BeginForm("Create", "Download", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<div class="editor-label">Download File</div>
<div class="editor-field">
<input name="DownloadFile" id="DownloadFile" type="file" />
@Html.ValidationMessage("DownloadFile");
</div>
<div class="editor-label">@Html.LabelFor(model => model.Downloads)</div>
<div class="editor-field">
@Html.EditorFor(model => model.Downloads)
@Html.ValidationMessageFor(model => model.Downloads)
</div>
<div class="editor-label">@Html.LabelFor(model => model.DownloadDate)</div>
<div class="editor-field">
@Html.EditorFor(model => model.DownloadDate)
@Html.ValidationMessageFor(model => model.DownloadDate)
</div>
<div class="display-field"><input type="submit" value="Add" /></div>
}
<div>@Html.ActionLink("Back To Downloads", "Index")</div>
Any sugestions?
Thanks,
Alex.
Ok I figured this out finally, It was all caused because I named the file input on the form the same as my models file field, so the model binder was picking this up and trying to bind the posted file directly to the binary property which was throwing an exception because the string was not binary.
So to fix it I simply added this to my create action method:
By telling the model binder to exclude the field it solved the problem.
Thanks,
Alex.
EDIT: This could also easily be solved by using view models