Передайте один дополнительный параметр вместе с HttpPostedFileBase для загрузки одного файла - PullRequest
1 голос
/ 10 апреля 2019

В моем приложении MVC у меня есть представление, содержащее 1. Один раскрывающийся список 2. Одна загрузка файла 3. Одна кнопка для отправки формы.

код формы (просмотр)

<form id="upload" enctype="multipart/form-data" action="@Url.Action("ExcelUpload", "NBL")" method="POST">


  @Html.DropDownList("CustomerName", new List<SelectListItem>
  {
      new SelectListItem() {Text = "Customer 1", Value="CM1"},
      new SelectListItem() {Text = "Customer 2", Value="CM2"}
  }, new { @class = "form-control", @style = "width:auto" })


  <input type="file" name="fileUpload" id="fileUpload" size="23" style="margin-top:5px"/>

  <button class="btn btn-primary">Upload</button> 

</form>

Я могу успешно передать свой файл в контроллер, когда нажимаю кнопку.

Код контроллера

public ActionResult ExcelUpload(HttpPostedFileBase FileUpload)
{
    if (FileUpload != null)
    {
         // Do Stuff here.
    }
}

Моя проблемаЯ также хочу выпадающее выбранное значение в контроллере, когда я нажимаю кнопку.Как передать в контроллер значение «Выпадающее выбранное» и файл?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Имя выпадающего элемента CustomerName, и оно находится внутри формы. Браузер отправит его на сервер в виде пары ключ-значение, ключом будет название выпадающего списка, а значением будет значение, выбранное пользователем.

Механизм связывания по умолчанию для инфраструктуры MVC будет искать действие с именем ExcelUpload, которое либо имеет параметр string customerName, либо действие имеет сложный тип (Model), у которого в качестве свойства указано CustomerName.

Измените свое действие на:

ExcelUpload(HttpPostedFileBase FileUpload, string customerName)
0 голосов
/ 10 апреля 2019

Проблема в том, что ваша модель не представляет представление или данные, которые вы хотите использовать. Так что сделайте модель так:

using System.ComponentModel.DataAnnotations;

namespace Models
{
    public class MyUploadModel
    {
        [Required]
        public HttpPostedFileBase File { get; set; }
        [Required] 
        public string CustomerName { get; set; }
    }
} 

Используйте эту модель в ваших представлениях для генерации формы, а затем в контроллере:

public ActionResult ExcelUpload(Models.MyUploadModel myModel)
{
    if (ModelState.IsValid)
    {
        // all good, save                
    }

    return View(myModel);
}

Конечно, вы можете просто добавить строковый параметр к вашему действию, но это гораздо более надежно и представляет MVC-шаблон (Модель / Представление / Контроллер).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...