asp.net-mvc-3 – 选择更改事件 – Html.DropDownListFor
发布时间:2020-05-23 11:50:21 所属栏目:asp.Net 来源:互联网
导读:我有两个下拉列表。从第一个选择的值加载另一个。当我在控制器中有帮助方法时,该怎么做? @using (Html.BeginForm()){div table width=100% cellpadding=0 cellspacing=0 tr tdbSelect a District:/b/td
|
我有两个下拉列表。从第一个选择的值加载另一个。当我在控制器中有帮助方法时,该怎么做? @using (Html.BeginForm())
{
<div>
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td><b>Select a District:</b></td>
<td>@Html.DropDownListFor(m => m.DistrictId,ViewData["DMManagers"] as IEnumerable<SelectListItem>,"Select One")</td>
</tr>
<tr>
<td><b>Select a TM:</b></td>
<td>@Html.DropDownListFor(m => m.TMId,ViewData["TMManagers"] as IEnumerable<SelectListItem>,"Select One")</td>
</tr>
</table>
</div>
}
private void LoadDistrictManagers()
{
var _DMS = (from c in SessionHandler.CurrentContext.ChannelGroups
join cgt in SessionHandler.CurrentContext.ChannelGroupTypes on c.ChannelGroupTypeId equals cgt.ChannelGroupTypeId
where cgt.Name == "District Manager"
select new { c.ChannelGroupId,c.Name }).OrderBy(m => m.Name);
ViewData["DMManagers"] = new SelectList(_DMS,"ChannelGroupId","Name");
}
private void 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 { c.ChannelGroupId,c.Name }).OrderBy(m => m.Name);
ViewData["TMManagers"] = new SelectList(_TMS,"Name");
}
public ActionResult SummaryReport()
{
DistrictManagerModel model = new DistrictManagerModel();
LoadDistrictManagers();
return View("AreaManager",model);
}
解决方法使用HTTPAttributes字段给两个下拉列表的唯一ID:@Html.DropDownListFor(m => m.DistrictId,"Select One",new {@id="ddlDMManagers"})
应将第二个下拉列表初始化为空列表: @Html.DropDownListFor(m => m.TMId,Enumerable.Empty<SelectListItem>(),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('<option value="0">Select One</option>');
// loop through the TM Managers and fill the dropdown
$.each(TMManagers,function(index,manager) {
$('select#ddlTMManagers').append(
'<option value="' + manager.Id + '">'
+ manager.Name +
'</option>');
});
});
}
});
});
});
将此类添加到您的控制器命名空间中: 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<TMManager> managers = (List<TMManager>)_TMS.ToList();
return Json(managers);
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-4 – 在ASP.Net MVC 4和Autofac中注册全局过滤
- 可以在ASP.NET用户控件中使用void async方法吗?
- asp.net-mvc – ASP.NET MVC是否有任何DateTime路由约束?
- 如何获取ASP.NET应用程序的完整虚拟路径
- asp.net – 使用AJAX进行WCF调用
- asp.net – 谁负责处理HttpPostedFile.InputStream – 何时
- asp.net-mvc – ASP.NET MVC中的Razor页面生命周期
- asp.net – 如何正确地大写希腊字在.NET?
- asp.net – Microsoft JScript运行时错误:’Sys’未定义
- asp.net-core – dotnet publish不会发布正确的appsettings
推荐文章
站长推荐
- 如何在ASP.NET中的多个子域中共享会话?
- asp.net-mvc – 我可以使用Visual Studio的快速版
- asp.net-mvc – 使用没有ORM的ASP.NET MVC
- ASP.NET MVC的提示和ASP.NET WebForms开发人员的
- asp.net – Web配置转换不工作
- asp.net – SSRS与自定义Web UI
- asp.net – 报表查看器控件(Web)显示空白报告
- asp.net – 无法使用URL重写出站规则来更改IIS响
- asp.net-mvc – asp.net mvc – 如何告诉子操作忽
- asp.net-mvc-5 – Sharepoint 2013 MVC 5提供商托
热点阅读
