Ввод не является допустимой строкой Base-64, так как он содержит не-базовый символ 64?
У меня есть форма, в которой пользователь может загрузить файл в раздел загрузки сайтов. Однако, когда форма отправлена, я получаю эту ошибку, без запроса, когда-либо сделавшего ее методом действия.
"Ввод не является допустимой строкой Base-64, так как он содержит не-базовый символ 64, более двух символов заполнения или небелый пробел среди символов заполнения."
код:
[HttpPost]
[Authorize]
public ActionResult Create(Download dl, HttpPostedFileBase DownloadFile)
{
и
@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>
Любые sugestions?
Спасибо,
Алекс.
Ответы
Ответ 1
Хорошо, я понял это, наконец, все это вызвано тем, что я назвал входной файл в форме таким же, как и в поле моего файла модели, поэтому привязка модели собирала это и пыталась связать опубликованный файл напрямую с двоичным свойство, которое выбрасывало исключение, потому что строка не была двоичной.
Итак, чтобы исправить это, я просто добавил это к моему методу создания действия:
[HttpPost]
[Authorize]
public ActionResult Create([Bind(Exclude = "DownloadFile")] Download dl, HttpPostedFileBase DownloadFile)
{
Сообщая модельному связующему, чтобы исключить поле, оно решило проблему.
Спасибо,
Алекс.
EDIT: это также можно легко решить, используя модели просмотра
Ответ 2
Алекс, вы частично правы с вашей оценкой. Причина, по которой он терпит неудачу, когда у вас есть свойство с тем же именем в вашей модели, что и имя входного объекта в форме, связано с тем, что DataType сопоставимого свойства на вашей модели не является System.Web. HttpPostedFileWrapper, который является типом данных, который двоичное связующее будет пытаться выполнить привязку.
Исключая ваше свойство, используя атрибут Bind, а затем извлекая файл из коллекции Request.Files, как вы показали, может работать, но может быть более элегантным, чтобы связующее выполняло свою работу (при условии, что тип данных соответствует Я упомянул выше), а затем вы можете просто получить доступ к файлу непосредственно из свойства вашей модели.
Ответ 3
Вы можете попробовать удалить HttpPostedFileBase из метода контроллера и использовать Request.Files [0] и посмотреть, не изменилось ли это.
Честно говоря, хотя я не понимаю, почему это произойдет, если в вашей модели не будет чего-то, что вызывает его.
Кроме того, здесь нужно выбрать nit, но DownloadFile должен быть загружен в вашей форме и в вашем методе контроллера.