#asp.net-mvc-2 #file-upload #httppostedfilebase
#asp.net-mvc-2 #загрузка файла #httppostedfilebase
Вопрос:
У меня проблема с загрузкой моего файла. Я хочу загрузить его из моего представления редактирования:
<%
using (Html.BeginForm("edit","profile",FormMethod.Post, new { enctype="multipart/form-data" }))
{%>
<%: Html.ValidationSummary(true) %>
<%: ViewData["ErrorMessage"] %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Image) %>
</div>
<div class="editor-field">
<input type="file" id="Image" name="Image" />
<label id="LabelErrorImage" class="errorMessage" />
</div>
<p>
<input type="submit" value="Save" onclick="return Validate(); return false;"/>
</p>
</fieldset>
<% } %>
Я хочу использовать класс HttpPostedFileBase. Мое действие по редактированию:
[Authorize]
[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(string id, HttpPostedFileBase file, FormCollection formValues)
{
if (ModelState.IsValid)
{
if (file != null amp;amp; file.ContentLength > 0)
{
CustomHelpers.createFolder();
var tmpPath = MyConfig.UPLOAD_FILE_PATH "/" Membership.GetUser().ProviderUserKey.ToString();
var path = Path.Combine(Server.MapPath(MyConfig.UPLOAD_FILE_PATH), "Avatar");
var fileExtension = Path.GetExtension(file.FileName);
file.SaveAs(path);
user.Image = "Avatar";
}
adventureDB.SaveChanges();
return RedirectToAction("Index");
}
}
Но у меня всегда есть пустой файловый объект, почему????? Есть ли у вас какие-либо идеи, предложения, почему это может так работать? Может быть, проблема в том, как я передаю значение файла в действие редактирования?
Редактировать:ЭТО ДЕЙСТВИТЕЛЬНО СТРАННО, ТАК КАК ДАЖЕ КОГДА я УДАЛЯЮ
using (Html.BeginForm("Index","Profile",FormMethod.Get, new { enctype="multipart/form-data" }))
Источник страницы по-прежнему имеет:
<body>
<form method="post" action="6111e591-b92d-4bcb-b214-ab8f664b35f9" id="form1">
Я имею в виду, что я не могу изменить тег, но понятия не имею, почему :/
Ответ №1:
Попробуйте изменить:-
public ActionResult Edit(string id, HttpPostedFileBase file,
FormCollection formValues)
Для:-
public ActionResult Edit(string id, HttpPostedFileBase image,
FormCollection formValues)
поскольку имя вашего ввода равно image
<input type="file" id="Image" name="Image" />
Редактировать
Честно говоря, что-то еще останавливает привязку изображения. Это вся форма, которую вы опубликовали?
Несколько вещей для тестирования
- В вашем методе дважды указан HTTPOST, хотя я не думаю, что это должно что-то изменить.
- Просмотрите исходный код и убедитесь, что в исходном коде больше ничего не названо
name=image
. - Перед повторным тестированием убедитесь, что вы очистили свой кэш и указали правильный исходный код
- Попробуйте использовать
<form action="/profile/index" method="post" enctype="multipart/form-data">
- Судя по вашей последней правке, у вас проблема с основными страницами / макетом? Является ли это гибридом mvc / webforms?
Комментарии:
1. Да, верно, я изменил его, но он по-прежнему имеет значение null :/
2. Нет, это не весь код, поскольку он очень длинный, но я заметил, что не имеет значения, что я пишу, на мой взгляд, поскольку всегда перенаправляется на ту же функцию. Может быть, потому, что я использую главный сайт, а он использует механизм, которого я не знаю?
3. Кроме того, у меня есть еще 2 формы в исходном коде: <метод формы= «post» action =»6111e591-b92d-4bcb-b214-ab8f664b35f9″ id =»form1″> <класс div =»aspNetHidden»> <тип ввода = «скрытый» name =»__VIEWSTATE» id =»__VIEWSTATE» value =»/ wEPDwUJMjIyODQ4MTE2ZGQ0zXwQxrpoQd by EOC4qY3mQAo7zW2FgvbThGQUWMVQ==» /></div> и затем второй, который я написал в view: <действие формы =»/Profile/Edit» enctype=»multipart /form-data» метод =»POST»>
4. Да, я нашел ошибку!!!! В главном. Сайт по умолчанию создает форму, и вложенных форм быть не может, так как вторая игнорируется! Я потерял так много времени, чтобы это выяснить! Спасибо за помощь!
5. Не беспокойтесь, возможно, вы могли бы отметить этот вопрос как ответ, спасибо
Ответ №2:
Решение этой проблемы, когда:
- Мы используем Master.Сайт,
- Мы хотим загрузить файл в виде,
- Мы уверены, что это должно сработать, но у нас все время есть null,
Затем:
- Ребята были правы — на мой взгляд, у меня было неправильное имя — проверьте это!
- Проверьте исходный код вашего представления, и если у вас есть 2 тега < form>, вам следует удалить тег < form> с основного сайта, так как тогда второй игнорируется!
Теперь это должно сработать.
Ответ №3:
Что ж, на ваш взгляд, вы назвали входной файл ‘image’, но ваш метод action принимает параметр с именем ‘file’. Переименуйте один из них, и он должен работать.
Комментарии:
1. Да, но я изменил его сейчас и все тот же :/