使用UpdatePanel从页面上的Web控件注册样式表

时间:2010-07-27 16:16:15

标签: asp.net css user-controls stylesheet web-controls

从客户Web控件在页面上注册一次样式表的最佳方法是什么?请记住,该页面使用UpdatePanel进行异步调用。我尝试将<link>标记放在ScriptManager.RegisterClientScriptBlock()中,但是我收到此错误:

  

为类型注册的脚本标记   'MyControl'   并且键'MyKey'无效   脚本标记之外的字符:   。只有格式正确的脚本标签   可以注册。

如果我尝试通过将其添加到控件层次结构中将其添加到页面中,则会在页面上为我的控件的每个实例显示一次。

1 个答案:

答案 0 :(得分:3)

嗯,这就是我的用途。我决定创建包含链接的扩展方法。

更新:我不得不更改ScriptManager扩展程序,因为它仍然无法与UpdatePanels一起使用。更新后的代码如下。

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub RegisterStylesheetInclude(ByVal scriptManager As ScriptManager, ByVal page As Page, ByVal url As String)
        Dim css = "var cssNode = document.createElement('link');" & _
         "cssNode.type = 'text/css';" & _
         "cssNode.rel = 'stylesheet';" & _
         "cssNode.href = '" & url & "';" & _
         "document.getElementsByTagName('head')[0].appendChild(cssNode);"

        scriptManager.RegisterClientScriptBlock(page, page.GetType(), url, css, True)
    End Sub

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub RegisterStylesheetInclude(ByVal clientScriptManager As ClientScriptManager, ByVal page As Page, ByVal url As String)
        Dim found = page.Header.Controls.OfType(Of HtmlLink).Any(Function(m) m.Href = url)

        If Not found Then
            Dim link As New HtmlLink()
            link.Href = url
            link.Attributes("type") = "text/css"
            link.Attributes("rel") = "stylesheet"
            page.Header.Controls.Add(link)
        End If
    End Sub