首页 > 解决方案 > 使用 FormCollection 发布下拉值/键

问题描述

我有一个发布到操作的表单:

 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)作为键。

我希望能够从下拉列表中获取所选项目并将其传递给 Index 操作的 Httpost 中的 FormCollection。为了我的生活,我无法让它工作!

我期待看到一个名为“CustomersDdl”的键,它的价值。例如,如果我有一个充满国家/地区的下拉列表,然后我选择了英格兰,我希望在 FormCollection 中看到一个值,即英格兰。

我究竟做错了什么?

标签: c#asp.net-mvcrazorhtml.dropdownlistforformcollection

解决方案


回发的值取决于您创建“SelectListItem”的方式,在您的情况下,它位于方法“GetAllSerials()”中

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

推荐阅读