【问题标题】:Getting the chosen item from DropDownList从 DropDownList 中获取所选项目
【发布时间】:2016-01-01 03:47:44
【问题描述】:

我使用 JavaScript 来填充一个名为“组”的列表。

然后我创建一个 DropDownList:

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

DropDownList 显示正常。

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

【问题讨论】:

  • 这不是 C#;这是 Javascript、Razor 和 Bootstrap。
  • 控制器是c#的,我问的是控制器。
  • 你谷歌了吗?可以用 DropDownListFor 吗?

标签: c# asp.net-mvc razor


【解决方案1】:

如果您需要将其绑定到 group_id,则使用它作为名称:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    可以监听下拉的change事件,获取选中的选项值并设置为group_id

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

    我不确定您为什么要通过 javascript 加载下拉内容,但还有其他更好的方法可以呈现下拉并将所选值传递回您的控制器,如 this post 中所述。

    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 
    }
    

    【讨论】:

    • 我这样做是因为我有一个父下拉列表,并且根据父列表中选择的值,第二个下拉列表填充在 javascript 中。那还好吗?
    • 我是这么认为的。那也行。您可以使用属性名称作为第一个参数,如果这是您的视图模型的一部分,正如 Chris Pratt 在他的回答中提到的那样。
    • 谢谢,您的回答很有帮助,现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多