正在从下拉列表中获取所选项目

本文关键字:选项 项目 获取 下拉列表 | 更新日期: 2023-09-27 18:28:33

我使用JavaScript填充一个名为"groups"的列表。

然后我创建了一个DropDownList:

<div class="form-group">
    <div class="col-md-10">
        @Html.DropDownList("groups", new SelectList(string.Empty, "Value", "Text"), "Choose...")
    </div>
</div>

DropDownList显示良好。

我需要做的是将从"groups"中选择的值分配给model.group_id。我不知道如何在控制器方法中获得DropDownList中选择的项目。谢谢你的建议。

正在从下拉列表中获取所选项目

如果您需要它绑定到group_id,那么使用它作为名称:

@Html.DropDownList("group_id", ...)

或者,更好的是,使用强类型的助手:

@Html.DropDownListFor(m => m.group_id, ...)

假设表单中有一个名称为group_id的表单字段,并且出于某种原因,您希望将下拉列表中的选定值设置为该字段,

@Html.HiddenFor(s=>s.group_id)  
<div class="form-group">       
  @Html.DropDownList("groups",new SelectList(string.Empty, "Value", "Text"), "Choose...")  
</div>

您可以监听下拉列表的更改事件,并获得所选的选项值并设置为group_id

$(function(){
   $("#groups").change(function(e){
      var v=$(this).val();
      $("#group_id").val(v);
   });    
});

我不知道你为什么要通过javascript加载下拉列表内容,但还有其他更好的方法来呈现下拉列表,并将所选值传回你的控制器,如本文所述。

SelectedGroup属性添加到视图模型

public class CreateSomethingViewModel
{
  public int SelectedGroup {set;get;}
  public List<SelectListItem> Groups {set;get;}
}

在你的GET操作中,如果你想加载组,你可以用

public ActionResult Create()
{
  var vm = new CreateSomethingViewModel();
  //Hard coded for demo. You may replace with your db entries (see below)
  vm.Groups = new List<SelectListItem> {
   new SelectListItem { Value="1","Chase bank" },
   new SelectListItem { Value="2","PNCbank" },
   new SelectListItem { Value="3","BOA" } 
  };
  return View(vm);
}

在你看来

@model CreateSomethingViewModel
@using(Html.BeginForm())
{
  @Html.DropDownListFor(s=>s.SelectedGroup,Model.Groups)
  <input type="submi" />
}

有了这个,你不需要使用任何js代码(即使你通过javascript加载下拉内容),当用户更改下拉选项值时,它将被设置为SelectedGroup属性的值。

[HttpPost]
public ActionResult Create(CreateSomethingViewModel model)
{
  // check model.SelectedGroup
  // to do : Save and return/redirect 
}