0

我一直在为我的选项卡控件的问题而发疯。

它与 ASP.NET 中的 ajax 请求期间出现的问题有关,这让我发疯了,因为我认为我已经经历了至少 50 种不同的可能解决方案来尝试解决这个问题。

让我解释。我有一个 Tab 控件(一个 TabStrip)。它只是一个表(使用 Repeater 控件生成),它有一行,每一列(每个 td 元素)都是一个“选项卡”。每当单击选项卡时,都会显示相应的 div(面板)。

这行得通,因为我将 div 的样式属性设置为 display:block,所以会显示相应的 div。

我遇到的问题与应用于 td 元素的样式有关。样式有2种,一种表示标签被选中,另一种表示标签未被选中。

因此,当该用户选择一个选项卡时,会显示相应的 div,并且 JavaScript 函数会循环遍历 TabStrip 中的 tds,并将“未选择”样式应用于除当前选定选项卡之外的所有选项卡,在这种情况下为“选定”样式被申请;被应用。

除非页面上发生过 Ajax 请求,否则这非常有用。

由于某些疯狂的原因,控制选项卡的 JavaScript 不再可以使用 css 类。选项卡在单击时起作用(因为它们显示相应的 div),但样式不再应用于选项卡。

我已经尝试了几乎所有方法来解决这个问题。我什至创建了一个 JavaScript 函数,它动态地将链接添加到带有选项卡样式的样式表,以确保即使在 Ajax 请求期间也能加载样式表。

这没有帮助,我现在正在考虑一种完全不同的方法,但我不知道我将如何做到这一点。

我想要做的是设置 tds 的样式属性而不是设置 className 属性。

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

那么...如何从 styleSheet 中获取样式以解析它并将适当的样式属性应用于元素?

您还有其他建议吗...因为这个想法似乎很困难,此时我想知道我是否正在寻找一些更简单的解决方案来解决这个丑陋的问题。

谢谢你的帮助,

-弗林尼

4

2 回答 2

0

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

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

于 2009-09-08T16:59:56.920 回答
0

我找到了问题的答案。

它与样式表无关。它最终成为我在 .NET 代码中使用 ScriptManager 注册用于选项卡的 JavaScript 数组的方式的问题。

对我来说,解释起来又长又复杂,所以我将把它总结为这个注释:

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

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

我通过使用 Page.ClientScript.RegisterArrayDeclaration() 方法解决了我的问题。这没有相同的行为。

谢谢你的时间!

-弗林尼

于 2009-09-08T19:11:29.447 回答