В моем приложении 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.
}
}
Моя проблема в том, что я также хочу, чтобы в контроллере выпадало выбранное значение, когда я нажимаю кнопку. Как я могу передать в контроллере как раскрывающееся выбранное значение, так и файл вместе?
Это сработало! Пожалуйста, опубликуйте это как ответ, чтобы я мог пометить его как принятый ответ.
Проблема в том, что ваша модель не представляет представление или данные, которые вы хотите использовать. Итак, сделайте модель следующим образом:
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)
Изменить на:
ExcelUpload(HttpPostedFileBase FileUpload, string customerName)