使用HTTPAttributes字段给两个下拉列表的唯一ID:
@Html.DropDownListFor(m => m.DistrictId,"Select One",new {@id="ddlDMManagers"})
应将第二个下拉列表初始化为空列表:
@Html.DropDownListFor(m => m.TMId,Enumerable.Empty(),new {@id="ddlTMManagers"})
如果您不介意使用jQuery ajax在第一个下拉列表中触发“更改”事件时更新第二个下拉列表:
$(function() {
$('select#ddlDMManagers').change(function() {
var districtId = $(this).val();
$.ajax({
url: 'LoadTerritoryManagers',type: 'POST',data: JSON.stringify({ districtId: districtId }),dataType: 'json',contentType: 'application/json',success: function (data) {
$.each(data,function (key,TMManagers) {
$('select#ddlTMManagers').append('Select One');
// loop through the TM Managers and fill the dropdown
$.each(TMManagers,function(index,manager) {
$('select#ddlTMManagers').append(
''
+ manager.Name +
'');
});
});
}
});
});
});
将此类添加到您的控制器命名空间中:
public class TMManager
{
public int Id {get; set;}
public string Name {get; set;}
}
您将需要更新控制器操作LoadTerritoryManagers(),以响应ajax请求并返回一个{Id,Name}对象的JSON数组。
[HttpPost]
public ActionResult LoadTerritoryManagers(int districtId)
{
var _TMS = (from c in SessionHandler.CurrentContext.ChannelGroups
join cgt in SessionHandler.CurrentContext.ChannelGroupTypes on c.ChannelGroupTypeId equals cgt.ChannelGroupTypeId
where cgt.Name == "Territory" && c.ParentChannelGroupId == districtId
select new TMManager(){ Id = c.ChannelGroupId,Name = c.Name }).OrderBy(m => m.Name);
if (_TMS == null)
return Json(null);
List managers = (List)_TMS.ToList();
return Json(managers);
}