【问题标题】:combo box ajaxcontrol组合框 ajaxcontrol
【发布时间】:2011-01-25 12:15:09
【问题描述】:

我有一个带有 5-6 个组合框的过滤器面板 ajax 控制工具包..

我希望这个过滤器面板在默认情况下是可见的。并在客户端单击时使用 java 脚本切换它(显示/隐藏)

但是,当我将过滤器面板设置为可见时 = false runat=server java 脚本没有获取对象

如果我在后面编写代码.. filterpanel.attributes.add("style",display:none) filterpanel.attributes.add("style",visibilty:hidden)

组合框引发运行时错误..

我在网上搜索过,它说.. 组合框很难在面板内呈现.. 其默认属性最初为 false!

【问题讨论】:

  • 组合框是一个 ajax 控件工具包.. 我得到的运行时错误是无效参数.. 面板的默认可见属性 = false

标签: asp.net ajax ajaxcontroltoolkit


【解决方案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

【讨论】:

    【解决方案2】:

    问题在于,如果您在服务器控件上设置 Visible="false",它将不会呈现任何 HTML 元素,包括组合框。使用以下隐藏面板是 AJAX 友好的:

    <asp:Panel id="p" runat="server" style="display:none">
    
    </asp:Panel>
    

    这将呈现一个 DIV 和您的所有下拉菜单,但将它们隐藏在视图之外,从而允许您切换 div 的可见性。

    【讨论】:

    • 嘿..我试过..这样做..但仍然发生相同的错误..页面加载后..组合框下拉在脚本资源动态创建中引发运行时错误文件 style.width = bestwidth + px 其中最佳宽度 = -2
    【解决方案3】:

    不要对面板应用“显示:无”,只应用“可见性:隐藏”:

    filterpanel.Attributes.Add("style", "visibilty: hidden");
    

    这将隐藏您的面板(我想是 &lt;div&gt;),但会保留所需的空间(因此将允许相应 DOM 元素的维度相关属性具有正确的值)。

    当然你会看到一个空的地方,但你可以通过使用元素的样式来解决这个问题(也许通过将面板嵌套在另一个元素中并将样式应用于该元素而不是在面板上这样做本身)。

    【讨论】:

    • 我应该放置哪个元素来隐藏面板??..并应用样式?...我要拿另一个面板吗?...不会有同样的效果吗?
    • @pratek:首先,在包含组合框的面板上尝试我的解决方案。如果有帮助,则在面板周围包裹一个 DIV 元素,并通过将“height”和“line-height”CSS 属性设置为“0px”使其不可见(您可能还需要应用“overflow: hidden”)。测试一下。如果它没有抛出错误,则更改显示面板的逻辑,以便它还可以从父 DIV 中删除这些 CSS 样式(否则您将看不到面板,因为父 DIV 已缩小)。
    • 包含我的组合框的面板..我试着按照你说的让它隐藏..它确实有帮助..我只看到组合框的下拉按钮..和白点..请告诉我从父 div 中删除 css 样式的逻辑..我可以完全测试它..非常感谢你
    • 我猜你已经想通了(在 Frédéric Hamidi 的帮助下);-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多