加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何填充asp:DropDown客户端?

发布时间:2020-12-15 23:58:30 所属栏目:asp.Net 来源:网络整理
导读:我有一个带有两个 asp:DropDown的网页控制: 当用户选择要填写状态列表的国家/地区时. 尝试#1 – OnSelectedIndexChanged 第一件事很简单:在第一个下拉列表的OnSelectedIndexChanged期间,填充第二个框: //be sure to set AutoPostBack of cbCountry to tr
我有一个带有两个< 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事件,并且状态下拉列表填充…

……我第一次改变国家下拉菜单.

如果我再次更改国家/地区,则会抛出异常:

Invalid postback or callback argument.

不知何故,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 PageMethods,and update the cbState in client javascript:

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,这将是完美的!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读