Зарегистрируйте таблицу стилей из веб-элемента управления на странице с помощью UpdatePanel - PullRequest
2 голосов
/ 27 июля 2010

Каков наилучший способ зарегистрировать таблицу стилей один раз на странице из пользовательского веб-элемента управления?Пожалуйста, имейте в виду, что страница использует UpdatePanel для асинхронных вызовов.Я попытался просто поместить тег <link> в ScriptManager.RegisterClientScriptBlock (), но получаю эту ошибку:

Тег сценария, зарегистрированный для типа «MyControl» и ключа «MyKey», содержит недопустимые символы внетеги сценария:Только правильно отформатированные теги сценария могут быть зарегистрированы.

Если я попытаюсь добавить его на страницу, добавив его в иерархию элементов управления, он будет отображаться один раз для каждого экземпляра моего элемента управления на странице.

1 Ответ

3 голосов
/ 27 июля 2010

Ну, вот что я сделал.Я решил создать методы расширения, которые будут включать ссылку.

Обновление: Мне пришлось изменить расширение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...