我正在尝试添加一个JavaScript函数,以便将ListBox中的所有选定项目显示为页面上Label中的连续字符串。这是必需的,因为AutoPostBack =“true”将导致ListBox一直滚动回第一个选定的项目。
所以这段代码可行:
<script type="text/javascript">
function Updatelist() {
var sel = document.getElementById('<%=lstbxStuff.ClientID%>');
var lbl = document.getElementById('ctl00_cph_lblSelectedStuff');
var listLength = sel.options.length;
var textForListbox = "";
var list2length = 0;
for (var i = 0; i < listLength; i++) {
if (sel.options[i].selected) {
if(list2length == 0) {
textForListbox = sel.options[i].text;
} else {
textForListbox = textForListbox + ", " + sel.options[i].text;
}
list2length++;
}
}
lbl.innerText=textForListbox;
return textForListbox;
}
</script>
不幸的是,我仍然需要SelectedIndexChanged委托背后的代码。有没有办法在不做PostBack的情况下使用这两种方法?当我设置AutoPostBack =“false”时,我的代表似乎永远不会到达。
答案 0 :(得分:0)
如果不是您想要的行为,我认为AutoPostBack不是您的最佳选择。当ASP.Net发回一个完整的帖子时,它与“传统的”HTML表单帖子相同,将表单的全部内容发送回服务器并等待响应(由于如何响应,这恰好是同一页面Asp.Net响应)。因此,为什么列表框中的位置会丢失 - 这是一个你要回来的全新列表框。
您是否将ASP.Net Ajax(UpdatePanels)视为一种可能的选择?这与回发的行为相同,因为它会将数据发送回服务器并调用您的方法,但只会回发部分页面。
答案 1 :(得分:0)
如果你想调用服务器端deligate,那么你必须做一个PostBack。
需要运行的服务器上的代码是什么?您应该能够使用JavaScript完成所有工作,然后在选择所有列表项后,使用不同的触发器(而不是selectedIndexChange)来运行服务器端代码。
您是否也看过Ajax UpdatePanel和maintainScrollPositionOnPostBack =“true”,以便页面在回发后保留其滚动位置。但是这只会影响页面滚动条而不影响选择框。