【问题标题】:How to populate a @Html.DropDownList after selecting another @Html.DropDownList [duplicate]选择另一个@Html.DropDownList 后如何填充@Html.DropDownList [重复]
【发布时间】:2013-05-23 21:56:38
【问题描述】:

加载了一些类别的DropDownList,我需要根据第一个下拉列表中选择的选项填充另一个@Html.DropDownList。

这是我用来填充第一个下拉列表的代码:

在控制器上:

        TecnicService ListCategory = new TecnicService();
        IList<Category> resultCat = ListCategory.GetCategory();

        List<SelectListItem> CatDropDown = new List<SelectListItem>();

        foreach (Category in resultadoCat)
        {
            CatDropDown.Add(new SelectListItem
            {
                Value = a.Id.ToString(),
                Text = a.Name.ToString()
            });
        }

在视图上:

  @model APP.Models.DataViewModel  
    @using (Html.BeginForm("NewPol", "Tecnic", null, FormMethod.Post, new { id = "pol-data-form", @class = "form-horizontal" }))
    {
    <div class="control-group">
             <label for="category" class="control-label">Category</label>              
             <div class="controls">
                  @Html.DropDownList("BasicData", Model.Category, new { @class= "required", name="category"})
             </div>               
        </div>    
        <div class="control-group">
             <label for="ram" class="control-label">Ram</label>
              <div class="controls">
                  @Html.DropDownList() WHAT DO I DO HERE???????
              </div>
        </div>
.
.}

我通过返回列表的服务获取数据,现在我需要根据第一个下拉列表的选择填充第二个下拉列表。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-4


    【解决方案1】:

    您要查找的内容称为级联下拉列表

    您可以创建一个 jQuery 插件来跟踪更改并向服务器发送 ajax 请求以获取另一个下拉列表的值:

    (function ($) {
        $.fn.cascade = function (options) {
            var defaults = { };
            var opts = $.extend(defaults, options);
    
            return this.each(function () {
                $(this).change(function () {
                    var selectedValue = $(this).val();
                    var params = { };
                    params[opts.paramName] = selectedValue;
                    $.getJSON(opts.url, params, function (items) {
                        opts.childSelect.empty();
                        $.each(items, function (index, item) {
                            opts.childSelect.append(
                                $('<option/>')
                                    .attr('value', item.Id)
                                    .text(item.Name)
                            );
                        });
                    });
                });
            });
        };
    })(jQuery);
    

    然后简单地连接起来:

    $(function () {
        $('#SelectedProvinceId').cascade({
            url: '@Url.Action("Cities")',
            paramName: 'provinceId',
            childSelect: $('#SelectedCityId')
        });
    
        $('#SelectedCityId').cascade({
            url: '@Url.Action("Suburbs")',
            paramName: 'cityId',
            childSelect: $('#SelectedSuburbId')
        });
    });
    

    来源:Cascading drop-downs in MVC 3 Razor view

    来自简单的谷歌搜索的更多来源:

    AJAX Cascading with MVC4

    http://www.sidecreative.com/Blog/Entry/Cascading-dropdown-lists-with-MVC4-and-jQuery

    http://www.codeproject.com/Articles/258172/Simple-Implementation-of-MVC-Cascading-Ajax-Drop-D

    【讨论】:

      【解决方案2】:

      通常使用 ajax 来完成。您可以自己编写一些 JQuery 代码或使用您可以在网络上执行的众多插件之一来执行此操作。

      作为旁注,我注意到您使用 TwitterBootstrap。查看TwitterBootstrapMvc。您可能会发现它很有用。

      想知道为什么亚当的回答被否决了。他实际上给出了一个很好的答案。想知道 gusadolfo 是否因为没有提供代码而否决了它。如果是这样的话,gusadolfo,不要指望代码。我们可以指导您,纠正您在某处犯的错误,但不要指望我们能完全完成您的工作。

      【讨论】:

      • “去谷歌搜索”不是答案。
      • 感谢您的支持 :) @asawyer - 作为一名程序员,我认为“Go google it”始终是答案,但由于 SO 是其他人通过谷歌搜索到达的地方,我相信答案应该拥有尽可能多的信息 - 你可以看到我给了他 4 个链接(其中 2 个链接到 SO 中的 2 个其他问题),以便为他提供不同的选择。
      • 好的@asawyer 我接受你的论点,我会在链接旁边提供更多信息。虽然现在我相信我应该说这是一个重复的问题 =\
      • @AdamFridental 现在看起来好多了,+1 表示努力。这个问题看起来确实是重复的,所以继续投票吧。
      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2021-03-08
      • 1970-01-01
      相关资源
      最近更新 更多