我有一个带有5-6个组合框的过滤器面板ajax控制工具包..
默认情况下,我希望此筛选器面板显示为false。并使用java脚本在客户端单击时切换(显示/隐藏
但是,当我将筛选器面板设置为visible = false时,runat=server java脚本无法获取对象
如果我把代码放在后面..filterpanel.attributes.add("style",display:无) filterpanel.attributes.add("style",visibilty:隐藏)
组合框抛出运行时错误..
我在网上搜索过,上面写着..组合框很难在面板中呈现。其默认属性最初为false!
发布于 2011-01-25 21:58:58
问题是<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。
发布于 2011-01-25 20:36:44
问题是,如果您在服务器控件上设置Visible="false“,它将不会呈现任何HTML元素,包括组合框。使用以下内容隐藏面板是对AJAX友好的:
<asp:Panel id="p" runat="server" style="display:none">
</asp:Panel>这将渲染一个DIV和所有的下拉列表,但将它们从视图中隐藏,允许您切换div的可见性。
发布于 2011-01-25 21:08:16
不要将"display: none“应用于面板,仅将"visibility: hidden”应用于面板:
filterpanel.Attributes.Add("style", "visibilty: hidden");这将隐藏您的面板(我想是<div> ),但保留所需的空间(因此将允许相应DOM元素的与维度相关的属性具有正确的值)。
当然,您会看到一个空白点,但您可能可以通过处理元素的样式来解决这个问题(可能是通过将面板嵌套在另一个元素中,并将样式应用于该元素,而不是在面板本身上执行此操作)。
https://stackoverflow.com/questions/4793342
复制相似问题