gpt4 book ai didi

c# - 更新面板内的 DropDownList AutoPostBack 丢失了 CSS 设计

转载 作者:行者123 更新时间:2023-11-28 09:30:44 24 4
gpt4 key购买 nike

我有这个页面结构

<MasterPage>
<script type="text/javascript" src="../js/jquery.main.js"></script>
<link rel="stylesheet" type="text/css" href="../css/all2.css" media="all" />
<ContentPage>

<updatePanel>
<asp:DropDownList id="ddlCountry" runat="server" AutoPostBack="True" CssClass="width_412" OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged" ></asp:DropDownList>
</updatePanel>

</ContentPage>
</MasterPage>

现在我需要 AutoPostBack="True" 来绑定(bind)所选国家/地区的状态。

问题是“当我设置 AutoPostBack="True"时,我会丢失 DropDownList 设计

没有 AutoPostBack:

enter image description here

使用 AutoPostBack:

enter image description here

我进入 jquery.main.js 并发现选择的设计被动态替换

function replaceSelects() {
for(var q = 0; q < selects.length; q++) {
if (!selects[q].replaced && selects[q].offsetWidth && selects[q].className.indexOf("default") == -1){
selects[q]._number = q;
//create and build div structure
var selectArea = document.createElement("div");
var left = document.createElement("span");
left.className = "left";
selectArea.appendChild(left);
var disabled = document.createElement("span");
disabled.className = "disabled";
selectArea.appendChild(disabled);
selects[q]._disabled = disabled;
var center = document.createElement("span");
var button = document.createElement("a");
var text = document.createTextNode(selectText);
center.id = "mySelectText"+q;
var stWidth = selects[q].offsetWidth;
selectArea.style.width = stWidth + "px";
if (selects[q].parentNode.className.indexOf("type2") != -1){
button.href = "javascript:showOptions("+q+",true)";
}else{button.href = "javascript:showOptions("+q+",false)";}
button.className = "selectButton";
selectArea.className = "selectArea";
selectArea.className += " " + selects[q].className;
selectArea.id = "sarea"+q;
center.className = "center";
center.appendChild(text);
selectArea.appendChild(center);
selectArea.appendChild(button);
//hide the select field
selects[q].className += " outtaHere";
//insert select div
selects[q].parentNode.insertBefore(selectArea, selects[q]);
//build & place options div
var optionsDiv = document.createElement("div");
var optionsListParent = document.createElement("div");
optionsListParent.className = "select-center";
var optionsListParent2 = document.createElement("div");
optionsListParent2.className = "select-center-right";
var optionsList = document.createElement("ul");
optionsDiv.innerHTML += "<div class='select-top'><div class='select-top-left'></div><div class='select-top-right'></div></div>";
optionsListParent.appendChild(optionsListParent2);
optionsListParent.appendChild(optionsList);
optionsDiv.appendChild(optionsListParent);
selects[q]._options = optionsList;
optionsDiv.style.width = stWidth + "px";
optionsDiv._parent = selectArea;
optionsDiv.className = "optionsDivInvisible";
optionsDiv.id = "optionsDiv"+q;
populateSelectOptions(selects[q]);
optionsDiv.innerHTML += "<div class='select-bottom'><div class='select-bottom-left'></div><div class='select-bottom-right'></div></div>";
document.getElementsByTagName("body")[0].appendChild(optionsDiv);
selects[q].replaced = true;
}
all_selects = true;
}
}

我认为更新面板会在加载时回发,请帮助我。

最佳答案

I went inside jquery.main.js and found that designs for select were replaced dynamically

恐怕 UpdatePanel 的工作原理是替换其中的所有内容。这就是你的样式被破坏的原因。

如果保持样式对您很重要,您有两个选择:

  • 转向更原生的 AJAX 解决方案。即,捕获 JavaScript 中的更改,然后对页面中的某些 Web 服务甚至静态方法进行 AJAX 调用来执行您需要执行的操作。

  • 看看是否有办法让 jQuery 在 UpdatePanel 的每次调用完成后重新设置下拉列表的样式。

老实说,UpdatePanel 是 Microsoft 对某种 Ajax 库的首次尝试,而且这并不是他们最大的努力。摆脱这个并不是最糟糕的主意。不过,我知道这不是您想要的快速答案。

关于c# - 更新面板内的 DropDownList AutoPostBack 丢失了 CSS 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13775437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com