代码之家  ›  专栏  ›  技术社区  ›  Frinavale

异步回发发生后将所选样式应用于选项卡控件

  •  0
  • Frinavale  · 技术社区  · 15 年前

    我一直在为我的标签控制问题发狂。

    这与在ASP.NET中的Ajax请求过程中发生的一些混乱有关,这让我发疯,因为我认为我已经尝试过至少50种不同的解决方案来解决这个问题。

    让我解释一下。我有一个选项卡控件(Tabstrip)。它只是一个表(用转发器控件生成),其中有一行,每列(每个td元素)都是一个“tab”。每当单击选项卡时,都会显示相应的DIV(面板)。

    这样就可以了,显示相应的DIV,因为我将DIV的Style属性设置为display:block。

    我要解决的问题是TD元素的风格。有两种样式,一种表示选中了选项卡,另一种表示未选中选项卡。

    因此,当用户选择一个选项卡时,将显示相应的DIV,并且javascript函数将循环通过选项卡条中的TDS,并将“未选定”样式应用于除当前选定的选项卡之外的所有选项卡,在这种情况下,将应用“选定”样式。

    除非页面上曾经发生过Ajax请求,否则这项工作非常棒。

    出于某种疯狂的原因,CSS类不再对控制选项卡的javascript可用。单击选项卡时,选项卡会工作(与显示相应的分隔符一样),但样式不再应用于选项卡。

    我已经尽力解决了这个问题。我甚至创建了一个javascript函数,动态地将链接添加到样式表中,其中包含选项卡的样式,以确保即使在Ajax请求期间也加载样式表。

    这没有帮助,我现在正在考虑一个完全不同的方法,但我不知道我要怎么做。

    我要做的是设置TDS的Style属性,而不是设置ClassName属性。

    样式存储在外部样式表中,我希望将它们保留在那里,这样我就可以随时使用样式表轻松更改Tabstrip的样式,而无需编辑服务器代码。

    那么……如何从样式表中提取样式来解析它并将适当的样式属性应用到元素中?

    你还有其他建议吗……因为这个想法看起来很困难,现在我想知道我是否在寻找一个更简单的方法来解决这个难看的问题。

    谢谢你的帮助,

    -弗林尼

    2 回复  |  直到 15 年前
        1
  •  0
  •   John Fisher    15 年前

    应该避免从样式表中解析样式并将其直接放入样式元素中。这绝对是不规范的行为。但是,这是实现目标的唯一可能方法(我怀疑),您可以加载文件,用正则表达式解析它,用正则表达式替换它,然后将结果放入HTML。

    一个更好的解决方案是在这些混淆事情的Ajax回调之后,彻底分析页面正在使用的HTML。如果您没有一个工具可以让您看到当前的HTML(而不是下载的内容),那么您需要找到一个。在其中的某个地方,您应该看到在Ajax请求之后失败的原因。

        2
  •  0
  •   Frinavale    15 年前

    我找到了问题的答案。

    这与样式表无关。最后,我在脚本管理器中注册用于标记.NET代码的javascript数组的方式出现了问题。

    对我来说,解释起来又长又复杂,所以我将总结如下:

    scriptmanager.registerArrayDeclaration()方法将向任何已存在的数组添加元素…如果数组不存在,它将创建一个元素,然后向其中添加元素。仅当需要向数组中插入新元素时才应调用此函数。

    我的问题是,每次发生异步回发时,用于制表目的的数组都会加倍。这意味着选项卡式javascript将选择适当的选项卡,然后在数组中再次找到该值时取消选择该选项卡。

    我用page.clientscript.registerArrayDeclaration()方法解决了我的问题。这不具有相同的行为。

    谢谢你的时间!

    -弗林尼