Ответ 1
Попробуйте добавить атрибут "EncType" в вашу форму.
@using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
//FORM MARKUP HERE
}
Я использую ASP.Net MVC 4.0 и VS10. Я новичок в веб-приложении.
Я разработал страницу с видом бритвы html. Вот код Index.cshtml:
@{
ViewBag.Title = "BAP Automation";
}
@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<form action="Index">
<table> **//EDITED BELLOW**
<tr><form action="" method="post">
<td>Upload Excel File: </td>
<td><input type="text" name="NAMEtxtFileName"/></td>
<td><input type="button" value="Upload" id="IDbtnUpload" name="NAMEbtnUpload"/></td>
</form>
</tr>
<tr>
<td>Company Name: </td>
<td><input type="text" /></td>
<td></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Process" /></td>
<td></td>
</tr>
</table>
</form>
</div>
</section>
}
Я пытаюсь загрузить файл excel в событие NAMEbtnUpload. нажав на эту кнопку, мы будем на этой странице, откроется диалоговое окно загрузки файла и выберем файл, расположение файла будет показано в текстовом поле NAMEtxtFileName.
РЕДАКТИРОВАТЬ 1:
Я написал код из предложенного кода:
[HttpPost]
public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)
{
if (NAMEbtnUpload.ContentLength > 0)
{
var fileName = Path.GetFileName(NAMEbtnUpload.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Given Excel's"), fileName);
NAMEbtnUpload.SaveAs(path);
}
return RedirectToAction("Index");
}
но это показывает следующую ошибку:
Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно.
Запрошенный URL:/
Попробуйте добавить атрибут "EncType" в вашу форму.
@using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
//FORM MARKUP HERE
}
Phil Haack показывает вам, как обрабатывать загрузки файлов со своим сообщением в блоге Загрузка файла (или файлов) с помощью ASP.NET MVC.
Существует довольно много чего-то, чего вам не хватает, поэтому читайте эту статью, чтобы получить больше, чем любой ответ здесь.
** ОБНОВЛЕНИЕ ДЛЯ РЕДАКТИРОВАНИЯ 1 **
Пара проблем
<form action="index" >
- это должно быть <form action="/ControllerName/Index">
<input type="button" value="Upload" id="IDbtnUpload" name="NAMEbtnUpload"/>
должен бытьБолее традиционно использовать @using(Html.BeginForm())
в отличие от ручного написания тегов формы. См. Ниже.
@using(Html.BeginForm("Index"))
{
<table>
<tr>
<td>Upload Excel File: </td>
<td><input type="text" name="NAMEtxtFileName"/></td>
<td><input type="file" id="IDbtnUpload" name="NAMEbtnUpload"/></td>
</tr>
<tr>
<td>Company Name: </td>
<td><input type="text" /></td>
<td></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Process" /></td>
<td></td>
</tr>
</table>
}
нажав кнопку [upload], мы будем на этой странице, откроется диалоговое окно загрузки файла и выберем файл, расположение файла будет показано в текстовом поле NAMEtxtFileName.
Это невозможно, потому что элемент загрузки файла недоступен программно, больше. "В те дни, когда это было, и злонамеренные сайты молча загружали конфиденциальную информацию, установив значение управления загрузкой файла в хорошо известные местоположения файлов паролей и т.д.
Вам просто нужно поместить <input type="file" />
в свою форму и обработать сервер загрузки, как это предлагается в ссылке на ответ @Bretts.
Задайте имя управления файлами в классе контроллера. например, в приведенном выше коде
public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)
изменить NAMEbtnUpload на NAMEtxtFileName это решит вашу проблему.