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

Posted

技术标签:

【中文标题】使用 UpdatePanel 从页面上的 Web 控件注册样式表【英文标题】:Register stylesheet from web control on page with UpdatePanel 【发布时间】:2011-03-21 17:07:03 【问题描述】:

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

为 type 注册的脚本标签 '我的控制' 并且密钥“MyKey”无效 脚本标签之外的字符: .只有格式正确的脚本标签 可以注册。

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

【问题讨论】:

【参考方案1】:

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

更新:我不得不更改 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

【讨论】:

以上是关于使用 UpdatePanel 从页面上的 Web 控件注册样式表的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 UpdatePanel 导致整个页面回发?

如何从 JavaScript 更新 UpdatePanel

UpdatePanel中点击按钮 Session过期跳转页面相关问题:Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消

找不到ID为'xxx'的UpdatePanel。如果它是动态更新的,那么它必须在另一个UpdatePanel内

FileUpload与UpdatePanel

通过 Postback 在 UpdatePanel 中保留 DIV 的滚动位置