ASP.NET MVC 3 级联组合框不起作用

Posted

技术标签:

【中文标题】ASP.NET MVC 3 级联组合框不起作用【英文标题】:ASP.NET MVC 3 Cascading combobox doesn't work 【发布时间】:2013-04-27 18:26:49 【问题描述】:

我有两个组合框。我以这种方式填充的第一个组合框,它工作正常:

@html.DropDownListFor(
x => x.Town, 
new SelectList(Model.Towns, "Value", "Text"),
"-- Select town --")

    public IEnumerable<SelectListItem> Towns
    
        get
        
            List<DataRow> TownsListDB = OracleSelect("select * from Towns");
            List<SelectListItem> townsItems = new List<SelectListItem>();

            foreach (DataRow rw in TownsListDB)
            
                townsItems.Add(new SelectListItem  Value = rw[0].ToString(), 
                Text = rw[1].ToString() );
            

            return townsItems;
        
    

并且取决于城镇,我想显示医院列表:

@Html.DropDownListFor(
x => x.Hospital, 
Enumerable.Empty<SelectListItem>(),
"-- Select hospital --")

我的 jQuery 代码是:

 $('#Town').change(function() 
    var selectedTown = $(this).val();
    if (selectedTown != null && selectedTown != '') 
        $.getJSON('@Url.Action("Hospitals")',  town: selectedTown ,
         function           (hospitals) 
            var hospitalsSelect = $('#Hospital');
            hospitalsSelect.empty();
            $.each(hospitals, function(i, hospital) 
                hospitalsSelect.append($('<option/>', 
                        value: hospital.value,
                        text: hospital.text
                    ));
            );
            ); 
    
 );

和 C#:

        public ActionResult Hospitals(string town)
        
            var modelHospital = new MedicalViewModel();
            List<DataRow> HospitalsListDB = modelHospital.OracleSelect
            ("select * from Hospitals hh where hh.TownID = " + town);
            List<SelectListItem> hospitalsItems = new List<SelectListItem>();

            foreach (DataRow rw in HospitalsListDB)
            
//example:
//rw[0]=101111
//rw[1]=Dublin
                hospitalsItems.Add(new SelectListItem  Value = rw[0].ToString(), 
                Text = rw[1].ToString() );
            
            return Json(
                hospitalsItems,
                JsonRequestBehavior.AllowGet);
            return Json(hospitalsItems, JsonRequestBehavior.AllowGet);
        

但它不起作用。如果我将此代码用作返回结果,则可以:

  return Json(Enumerable.Range(1, 6).Select(x => new  value = x, text = x ),
                    JsonRequestBehavior.AllowGet
                );

为什么组合框不适用于我的数据库列表结果?

【问题讨论】:

看起来不错。它是在某处刹车,还是只是返回一个空列表?如果它坏了,错误信息是什么。如果它返回一个空列表,您是否仔细检查了查询是否返回任何内容? 当您打开下拉菜单时,您是否查看过 Firebug/Developer 工具中发生的情况,您应该能够看到发布的内容以及响应中返回的内容。 我是asp.net和jQuery的新手,调试jQuery帮我找出了错误,thanx。 【参考方案1】:

使用此代码:

return Json(hospitalsItems.ToList(), JsonRequestBehavior.AllowGet);

在最后一行代替这个

return Json(hospitalsItems, JsonRequestBehavior.AllowGet);

【讨论】:

他为什么要让它成为 ToList()? HospitalsItems 已经是 SelectListItems 的列表。 我发现了问题所在。听起来很有趣,我的 jQuery 代码中只需要大写字母:code select.append($('&lt;option/&gt;', value:hospital.Value, text: hospital.Text 【参考方案2】:

我发现了问题所在。听起来很有趣,我的 jQuery 代码中只需要大写字母:code select.append($('', value:hospital.Value, text: hospital.Text

【讨论】:

以上是关于ASP.NET MVC 3 级联组合框不起作用的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc 淘汰赛不起作用

ASP.NET MVC 敲除绑定不起作用

从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

ASP.NET MVC5 OWIN Facebook 身份验证突然不起作用

DataGrid 数据绑定/更新中的 WPF 组合框不起作用

ASP.Net Core MVC 依赖注入不起作用