Post 下拉菜单 values/keys 使用 FormCollection
Post Dropdown values/keys using FormCollection
我有一个表单 post 用于操作:
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 视图中,我有 post:
@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 中看到一个值返回说英格兰。
我做错了什么?
回发的值取决于您如何创建 "SelectListItem",在您的情况下它在方法 "GetAllSerials()"
中
vm.SerialNumbers = serialNumbers.Select(serial => new SelectListItem
{
Selected = serial.id == vm.SelectedSerial ? true : false,
Text = serial.Name,
Value = serial.Name
}).ToList();
我有一个表单 post 用于操作:
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 视图中,我有 post:
@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 中看到一个值返回说英格兰。
我做错了什么?
回发的值取决于您如何创建 "SelectListItem",在您的情况下它在方法 "GetAllSerials()"
中 vm.SerialNumbers = serialNumbers.Select(serial => new SelectListItem
{
Selected = serial.id == vm.SelectedSerial ? true : false,
Text = serial.Name,
Value = serial.Name
}).ToList();