我最近在一个网页上添加了一个UpdatePanel,它会在按钮点击时呈现不同的用户控件。我正在努力解决一个问题,我正在使用Header.Stylesheet.CreateStyleRule动态地将内联样式添加到标题中 - 问题是它不会插入部分回发并且它确实有意义。这显然是因为它是部分回发而且只有在第一次加载页面时才会呈现标题。
通过以下方法添加样式,从数据库中获取样式:
Private Sub InitializeStylesheet(ByVal ButtonId As Integer)
Dim CSSStylesheet As Stylesheet = StyleBackend.GetStylesheets(ButtonId)
Dim IdClassList As List(Of StyleIDClass) = StyleBackend.GetStylesheetsStyleIDClass(CSSStylesheet.StylesheetID)
'Iterates through the cssidclass
For Each cssidClass In IdClassList
Dim styleItems As List(Of StyleItem) = StyleBackend.GetStyleItemsByIDorClass(cssidClass.StyleIDClassID)
Dim cssString As String = Nothing
For Each StyleItem As StyleItem In styleItems
cssString += StyleItem.Property & ":" & StyleItem.Value & ";"
Next
'Iterates all cssitems which belongs to a cssidclass
Me.Header.StyleSheet.CreateStyleRule(New CustomStyle(cssString), Nothing, cssidClass.ClassOrID)
Me.Header.ViewStateMode = UI.ViewStateMode.Disabled
Next
End Sub
我一直在谷歌搜索我的屁股试图让它工作,但似乎是不可能的。
这篇msdn文章文字说我不可能做我想做的事情。 http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlhead.stylesheet.aspx
不支持在异步回发期间以编程方式添加样式或样式规则。将AJAX功能添加到ASP.NET网页时,异步回发会更新页面区域而不更新整个页面。有关更多信息,请参阅Microsoft Ajax概述。
有没有人有这样做的建议或替代方法?
谢谢!
答案 0 :(得分:0)
一种解决方案是将样式包含在主样式表中,而不是动态修改它们。即使它们是数据驱动的,如果总列表不是太大,也可以通过HTTP处理程序将它们与主页面一起输出。
或者(可能更有效),您可以将样式数据作为字符串返回给客户端并在那里处理。
您可以在客户端脚本管理器上侦听EndRequest事件:
function endRequest(){
// look at the updated DOM
}
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
可能是以下顺序:
UpdatePanel
endRequest
上,检查DOM以查看它是否包含带样式的隐藏字段(基于命名约定,数据属性或ID)