asp.net – 如何填充asp:DropDown客户端?
我有一个带有两个< asp:DropDown>的网页控制:
当用户选择要填写状态列表的国家/地区时. 尝试#1 – OnSelectedIndexChanged 第一件事很简单:在第一个下拉列表的OnSelectedIndexChanged期间,填充第二个框: //be sure to set AutoPostBack of cbCountry to true in the properties window protected void cbCountry_SelectedIndexChanged(object sender,EventArgs e) { cbState.Items.Clear(); FetchStatesForCountryIntoStateDropDown(cbState,cbCountry.SelectedValue); if (cbState.Items.Count > 0) cbState.SelectedIndex = 0; } 这很有效,除了它触发页面刷新.发送帖子时用户被中断,页面被重新加载.页面不再是他们离开的地方,他们不再坐在下拉列表中. 尝试#2 – 老式的kludgey UpdatePanels @Seglo calls UpdatePanels an old-fashioned kludge.但是因为我找不到更好的东西 – 让我们来试试吧!将内容包装在更新面板中,让它实现它的神奇之处: 问题在于,当UpdatePanel更新时,它会删除这两个控件并用新的控件替换它们.这意味着用户在第一个下拉列表中失去了焦点.人们建议horrible kludges using javascript to try to save and restore the focus.但我宁愿做正确的事情. 尝试#3 – 仅UpdatePanel您需要更新的内容 我不需要更新国家/地区下拉列表(也不需要更新标签).我只需要更新州下拉列表;那么为什么不在< asp:UpdatePanel>中包装它呢?事实上this is the answer suggested on StackOverflow: 这很有效.国家下拉列表不会失去焦点.触发OnSelectedIndexChanged事件,并且状态下拉列表填充… ……我第一次改变国家下拉菜单. 如果我再次更改国家/地区,则会抛出异常:
不知何故,updatepanel正在搞乱WebForms控件;使回发数据无效.这是有道理的,因为搞乱WebForms控件会使回发数据无效. 尝试#4 – 尝试使用javascript自行伪造回发 它没有给你任何收获;但是people have tried triggering a postback manually through javascript: $('#userControl1').on('focusout',function() { __doPostback('UpdatePanel2UniqueId',''); }); 除了不知道cbCountry和UpdatePanel1的ClientID外,脚本不会运行;我甚至不知道它是否能解决我的问题 尝试#5 – 使用PageMethods获取状态列表. 现在我只是链接其他人的随机建议.我花了大约4个小时试图实施任何建议.这意味着我已经失去了一天半的时间来尝试填充一个组合框. 我无法承受在谷歌上发现的每一个随机建议都失去一天;我需要一个真正的答案.所以我只是让他们向脾气暴躁的人们展示研究工作(好像研究工作很重要). 一些people have suggested calling ASP.net function GetStates(country) { PageMethods.GetTeam(teamCode,CountryCallback); } function CountryCallback(result) { var teamName = $get('TeamName'); var seed = $get('Seed'); var rpi = $get('RPI'); var scoutingReport = $get('ScoutingReport'); teamName.innerText = result.TeamName; seed.innerText = result.Seed; rpi.innerText = result.RPI; scoutingReport.innerText = result.ScoutingReport; } onchange="GetTeam(this.options[this.selectedIndex].value);" 这里的问题与尝试#2相同.视图状态将是错误的,因为我已经破坏了ASP.net背后的形式. 似乎存在一个基础问题,ASP.net和viewstate从根本上与客户端DOM更新不兼容.任何修改页面客户端的尝试都会使整个ASP.net Web表单编程模型无效. 解决方法
使用AJAX Control Toolkit ……它有一个CascadingDropDown,这将是完美的! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-web-api – 使用多种授权方案(HMAC和OAT
- ASP.NET MVC视图模型的最佳实践
- asp.net – 选择性地将CSS应用于gridview中的一行
- asp.net – 处理包含页面的用户控制事件
- asp.net-mvc – 扩展SignalR Server Hub类以创建
- asp.net-mvc-3 – 动态加载部分视图
- asp.net – Html-Agility-Pack没有加载包含完整内
- asp.net-mvc – 为什么Visual Studio 2010混合了
- 数据绑定ASP.NET ListItem列表DropDownList问题
- asp.net-mvc – 同一页面上的ASP.NET MVC模型绑定