Опубликовать выпадающие значения / ключи с помощью FormCollection - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть форма, которая публикует действие:

 public ActionResult Index()
    {
        CheckDataVM vm = new CheckDataVM();
        vm.SerialNumbers = GetAllSerials();
        vm.CustomerNames = GetAllCustomers();
        vm.DateFrom = DateTime.Now.AddDays(-1);
        vm.DateTo = DateTime.Now;

        return View(vm);
    }       

    [HttpPost]
    public ActionResult Index(CheckDataVM v)
    {
        CheckDataVM vm = new CheckDataVM();
        vm.SerialNumbers = GetAllSerials();
        var s = vm.SerialNumbers.First().Text.ToString();
        vm.Channels = GetAllChannels(s);

        vm.DateFrom = DateTime.Now.AddDays(-1);
        vm.DateTo = DateTime.Now;

        return View(vm);
    }

В моем представлении Razor у меня есть сообщение:

@using (Html.BeginForm("Index", "CheckData", FormMethod.Post, new { id = "SerialsForm" }))
{
    <div class="card-body" style="font-size: small;">
        <div class="form-group">
            @Html.DropDownListFor(x => x.SelectedSerial, Model.SerialNumbers, new { @class = "form-control form-control-sm" })
            <input type="submit" value="Submit" />
        </div>
    </div>
} 

Модель просмотра:

 public class CheckDataVM
    {         
        public string CustomersName { get; set; }
        public string SelectedSerial { get;set; }

        [Display(Name="Select a serial number")]
        public IEnumerable<SelectListItem> SerialNumbers { get; set; }
    }  

Раскрывающиеся списки работают, но когда я отправляю форму, единственное, что я получаю, - это имя объекта (SerialNumbers) в качестве ключа.

Я хочу иметь возможность выбрать выбранный элемент из раскрывающегося списка и передать его в коллекцию FormColpt в Httpost of the Index действия. Ради жизни я не могу заставить его работать!

Я ожидаю увидеть ключ с именем CustomersDdl и его значение. Например, если у меня выпадающий список стран, и я выбираю Англию, я ожидаю, что в FormCollection вернется значение с надписью Англия.

Что я делаю не так?

1 Ответ

0 голосов
/ 13 сентября 2018

Значение для обратной передачи зависит от того, как вы создаете «SelectListItem», в вашем случае это в методе «GetAllSerials ()»

  vm.SerialNumbers = serialNumbers.Select(serial => new SelectListItem
        {
            Selected = serial.id == vm.SelectedSerial ? true : false,
            Text = serial.Name,
            Value = serial.Name
        }).ToList();
...