【问题标题】:MVC (5) Populate a dropdown based on another [duplicate]MVC(5)基于另一个[重复]填充下拉列表
【发布时间】:2017-06-30 13:22:49
【问题描述】:

我知道我可以用SelectedListItem>@Html.DropDownList("someID") 和操作系统的列表创建一个下拉列表。

我的问题是,如果您有 2 个下拉菜单,而第二个下拉菜单取决于第一个下拉菜单中的所选项目,该怎么办?

你如何填充它?用JS?你会怎么做? 您是否会用另一个列表更改填充,更改整个下拉列表,或者可能为每个下拉列表组合提供部分视图,所以只需用正确的下拉列表替换即可。

【问题讨论】:

  • 这是基本思想。在第一个下拉列表更改时触发一个 Jquery 函数,该函数对服务器执行 AJAX 调用,根据所选值获取记录并构建第二个下拉列表。因此,当第一个下拉菜单发生变化时,该过程会重复..
  • 您可以将仅带有 Option 标记的局部视图返回给 Ajax 调用。在您的 ajax 成功中,您需要将其附加到各自的 <select> 标记中。或者,如果您不想返回部分视图,则可以返回 JSON,然后循环值并生成 <option> 标记并将其附加到下拉
  • 类似这样的东西,我猜想用 JS 手动填充: $("#Countries").change(function() { $.getJSON("/Home/States/List/" + $( "#Countries > option:selected").attr("value"), function(data) { var items = ""; $.each(data, function(i, state) { items += ""; } ); $("#States").html(items); }); });
  • 这正是你所需要的......
  • :) 我很好......反正这里有很多类似的答案......快乐的编码兄弟......

标签: html asp.net-mvc asp.net-mvc-5 html.dropdownlistfor


【解决方案1】:

我添加了 NetFiddle 示例。作品here

我建议使用 jquery $.getJson() 填充第二个下拉列表而不刷新页面。你可以像下面的例子那样实现。

//html

<select id="EventId" name="eventId">
    <option value="1">option1</option>
    <option value="2">option2</option>
    <option value="3">option3</option>
</select>

<label>Second</label>
<select id="SecondDropdown">  
</select>

// jquery

$("#EventId").on("change", function(){
    showValue($(this).val());
})

function showValue(val)
{
    console.log(val);               
    $.getJSON('@Url.Action("GetDropdownList", "Home")' + "?value=" + val, function (result) {                       
            $("#SecondDropdown").html(""); // makes select null before filling process
            var data = result.data;
            for (var i = 0; i < data.length; i++) {
                $("#SecondDropdown").append("<option>"+ data[i] +"</option>")
            }

    })    
}

//控制器

[HttpGet]
public JsonResult GetDropdownList(int? value)
{
    List<string> yourdata = new List<string>();

    if(value == 2)
    {
        yourdata.Add("option2a");
        yourdata.Add("option2b");
        yourdata.Add("option2c");
        return Json(new { data = yourdata}, JsonRequestBehavior.AllowGet);
    }
    else
    {
        return Json(new { data = ""}, JsonRequestBehavior.AllowGet);
    }           

}

【讨论】:

  • 像冠军兄弟一样工作
  • 我很高兴听到这个消息 :)
  • 我发现很多愚蠢的答案比这个得到更多的赞成票真的很有趣......无论如何,@hsnbl 你的方法很棒......
  • @AhashanAlamSojib 谢谢你的夸奖 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 2020-12-12
  • 2019-06-14
  • 1970-01-01
相关资源
最近更新 更多