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

В моем приложении 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.
    }
}

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

Изменить на: ExcelUpload(HttpPostedFileBase FileUpload, string customerName)

CodingYoshi 10.04.2019 13:38

Это сработало! Пожалуйста, опубликуйте это как ответ, чтобы я мог пометить его как принятый ответ.

Bluemarble 10.04.2019 13:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
558
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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 (модель/представление/контроллер).

Ответ принят как подходящий

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

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

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

ExcelUpload(HttpPostedFileBase FileUpload, string customerName)

Другие вопросы по теме