Подтвердить что ты не робот

Загрузка файла в asp.net mvc 4 бритвы

Я использую 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:/

4b9b3361

Ответ 1

Попробуйте добавить атрибут "EncType" в вашу форму.

@using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
  //FORM MARKUP HERE
}

Ответ 2

Phil Haack показывает вам, как обрабатывать загрузки файлов со своим сообщением в блоге Загрузка файла (или файлов) с помощью ASP.NET MVC.

Существует довольно много чего-то, чего вам не хватает, поэтому читайте эту статью, чтобы получить больше, чем любой ответ здесь.

** ОБНОВЛЕНИЕ ДЛЯ РЕДАКТИРОВАНИЯ 1 **

Пара проблем

  • <form action="index" > - это должно быть <form action="/ControllerName/Index">
  • У вас несколько вложенных тегов форм. Вы можете иметь несколько тегов формы, но они не могут быть вложенными. В вашем случае вам нужен только один. В большинстве случаев вам нужно только 1.
  • <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>
}

Ответ 3

нажав кнопку [upload], мы будем на этой странице, откроется диалоговое окно загрузки файла и выберем файл, расположение файла будет показано в текстовом поле NAMEtxtFileName.

Это невозможно, потому что элемент загрузки файла недоступен программно, больше. "В те дни, когда это было, и злонамеренные сайты молча загружали конфиденциальную информацию, установив значение управления загрузкой файла в хорошо известные местоположения файлов паролей и т.д.

Вам просто нужно поместить <input type="file" /> в свою форму и обработать сервер загрузки, как это предлагается в ссылке на ответ @Bretts.

Ответ 4

Задайте имя управления файлами в классе контроллера. например, в приведенном выше коде

public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)

изменить NAMEbtnUpload на NAMEtxtFileName это решит вашу проблему.