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($('<option/>', value:hospital.Value, text: hospital.Text
【参考方案2】:
我发现了问题所在。听起来很有趣,我的 jQuery 代码中只需要大写字母:code select.append($('', value:hospital.Value, text: hospital.Text
【讨论】:
以上是关于ASP.NET MVC 3 级联组合框不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用
ASP.NET MVC5 OWIN Facebook 身份验证突然不起作用