我有一个带有5-6个组合框的过滤器面板ajax控制工具套件..
我希望默认情况下此过滤器面板可见为false ..并使用java脚本在客户端点击时切换它(显示/隐藏)
然而,当我的过滤器面板为visible = false时,runat = server java脚本无法获取对象
如果我在后面做代码.. filterpanel.attributes.add(“style”,display:none) filterpanel.attributes.add( “风格”,公开程度:隐藏)
组合框会引发运行时错误..
我在网上搜索说..组合框很难在面板内呈现..其默认属性最初是假的!
答案 0 :(得分:1)
问题是<select>
元素必须是rendered(但不一定是visible)才能可靠地访问其维度属性。
所以display: none;
将无效,因为元素未呈现,visibility: hidden;
将部分工作,因为元素已呈现,因此在页面上为它们分配空间,但隐藏,以便空间将保持空白。
第三种解决方案是像往常一样渲染容器,但在浏览器视口之外使其完全positioned:
filterPanel.Attributes.Add("style",
"position: fixed; left: -10000px; top: -10000px;");
这样,面板及其内容将不可见,但<select>
元素的大小将被正确计算。
在客户端,显示面板的公式变为:
document.getElementById("filterPanelClientID").style.position = "static";
再次隐藏它:
document.getElementById("filterPanelClientID").style.position = "fixed";
您可以测试基于jQuery的实现here。
答案 1 :(得分:0)
问题是如果在服务器控件上设置Visible =“false”,它将不会呈现任何HTML元素,包括组合框。使用以下内容隐藏面板是AJAX友好的:
<asp:Panel id="p" runat="server" style="display:none">
</asp:Panel>
这会渲染DIV和所有下拉菜单,但会将它们隐藏起来,让您可以切换div的可见性。
答案 2 :(得分:0)
不要将“display:none”应用于面板,只应用“visibility:hidden”:
filterpanel.Attributes.Add("style", "visibilty: hidden");
这将隐藏您的面板(我认为<div>
)但保留所需的空间(因此将允许相应DOM元素的维度相关属性具有正确的值)。
当然你会看到一个空位但是你可以通过玩元素的样式来解决这个问题(可能是通过将面板嵌套在另一个元素中并将样式应用于该元素而不是在面板上执行该操作本身)。