c# - 如何在选择另一个@Html.DropDownList 后填充@Html.DropDownList

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

<分区>

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

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

在 Controller 上:

        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()
            });
        }

在 View 上:

  @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>
.
.}

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

最佳答案

您正在寻找的是级联下拉列表

您可以创建一个 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

关于c# - 如何在选择另一个@Html.DropDownList 后填充@Html.DropDownList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16724581/

相关文章:

c# - 防止复制/粘贴和右键单击文本框(电子邮件地址)

企业Web应用程序的.NET性能提示

asp.net-mvc - 使用 Unity 错误的 ASP.NET Web API 中的依赖注入(inject)

html - 打破 css 中一行的表格单元格规则

asp.net-mvc-4 - MVC4 中可能嵌套 DropDownList 的 DropDownList

javascript - 为什么在 asp.net mvc 中更改图像链接会异步调用 Controller

c# - 以编程方式从网页保存 excel 文件

c# - 用于显示独立存储中文件的数据绑定(bind)或 foreach

c# - 反序列化导致列表条目的副本

asp.net - 无法显示虚拟目录中的图像