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

时间:2009-09-08 16:47:58

标签: .net asp.net ajax asp.net-ajax ajax.net

我一直对我的标签控件的问题感到疯狂。

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

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

这样可以显示相应的div,因为我正在设置div的样式属性来显示:block。

我遇到的问题与应用于td元素的样式有关。有两种样式,一种指示选项卡,另一种指示未选中该选项卡。

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

除非在页面上发生过Ajax请求,否则这很有效。

出于某些疯狂的原因,控制选项卡的JavaScript不再可以使用css类。单击时,选项卡可以正常工作(如显示相应的div),但样式不再应用于选项卡。

我已经尝试了一切来解决这个问题。我甚至创建了一个JavaScript函数,它动态地将样式表的链接添加到样式表中,以确保即使在Ajax请求期间也加载了样式表。

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

我想要做的是设置tds的style属性,而不是设置className属性。

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

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

你还有其他任何建议......因为这个想法似乎很难,而且在这一点上我想知道我是不是在为这个丑陋的问题寻找一些更简单的解决方案。

感谢您的帮助,

-Frinny

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我找到了问题的答案。

它与样式表无关。最后,我使用ScriptManager在我的.NET代码中注册用于标签的JavaScript数组的方式出现了问题。

我解释这个问题很漫长而复杂,所以我只想总结一下这个说明:

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

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

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

谢谢你的时间!

-Frinny