Метод ClientScriptManager.RegisterClientScriptInclude позволяет вам зарегистрировать ссылку JavaScript с объектом Page (проверка на дубликаты).
Есть ли эквивалент этого метода для ссылок CSS?
Аналогичные вопросы относятся к ClientScriptManager.RegisterClientScriptBlock и ClientScriptManager.RegisterClientScriptResource





Я использовал файлы css как Встроенные ресурсы.
Вы можете добавить ссылки заголовков к файлам CSS в классах программной части ASP.Net следующим образом:
HtmlLink link = new HtmlLink();
link.Href = "Cases/EditStyles.css";
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
this.Header.Controls.Add(link);
Вы можете заранее просмотреть элементы управления заголовком, чтобы увидеть, есть ли он там. Показанный пример взят из Page_Load в одном из моих проектов и находится внутри условного выражения, которое добавляет EditStyles.css только в том случае, если страница должна находиться в режиме «Редактировать».
Для ClientScriptManager.RegisterClientScriptBlock и ClientScriptManager.RegisterClientScriptResource у них есть эквивалентные функции для проверки того, были ли они уже зарегистрированы (например, IsClientScriptrResourceRegistered).
см. метод HeadContainsLinkHref в этом ответе: stackoverflow.com/questions/1510766/…. "посмотреть, есть ли это уже там" для вас
Короткий ответ: нет. Вы, безусловно, можете использовать свои собственные функции (как предлагает CMPalmer), чтобы взять встроенные ресурсы CSS (как предлагает Гульзар) и встроить их на страницу.
Однако я не уверен, зачем вам это нужно. Если вы создаете многоразовый элемент управления, который имеет много стилей CSS, я бы посоветовал просто жестко закодировать имена классов в соответствии со стандартами вывода вашего элемента управления и отправить элемент управления вместе с предлагаемой таблицей стилей. Это дает вашим пользователям / клиентам возможность переопределить предложенные вами стили в соответствии со своими потребностями и в целом позволяет им управлять настройкой CSS по своему усмотрению.
Отделение стиля от разметки - это хорошо: вы уже идете по правильному пути, избегая различных встроенных атрибутов стиля ASP.NET, но вы должны полностью это сделать и не допускать использования CSS в вашей DLL.
Еще одна мысль: вы можете рассмотреть «пространство имен» для имен ваших классов, чтобы избежать конфликтов с общими именами классов, которые ваши потребители, возможно, уже используют. Например.
<div class = "SmillerControls_Toolbar">
<a class = "SmillerControls_Button" ...>...</a>
...
</div>
или вы могли бы обернуть все это в один класс «пространства имен», а затем написать свой CSS для этого:
<div class = "SmillerControls">
<div class = "Toolbar">
<a class = "Button" ...>...</a>
</div>
</div>
ваш CSS будет похож на
div.SmillerControls div.Toolbar
{
...
}
div.SmillerControls div.Toolbar a.Button
{
...
}
Я использую
<asp:Literal id = "cssliteral" runat = "server" />
в заголовке, а затем StringBuilder при загрузке страницы, который содержит динамический скрипт css.
StingBuilder str = new StringBuilder();
str.Append("<style type = "text/css">");
str.Append(".myclass {background-color:#" + mycolor);
str.Append("</style>");
cssLiteral.Text = str.ToString();
Просто проверьте наличие зарегистрированного скрипта, и если вы обнаружите, что его там нет, то вы узнаете, что это первый раз, когда ваш элемент управления создается. В этот момент вы можете просто перетащить на свою страницу буквальный элемент управления, указывающий на нужный вам файл css.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
With Page.ClientScript
If Not .IsClientScriptIncludeRegistered("JQuery") Then
.RegisterClientScriptInclude("JQuery", "Scripts/jquery-1.4.2.min.js")
Dim l As New Literal()
l.Text = "<link href='Uploadify/uploadify.css' rel='stylesheet' type='text/css' />"
sender.controls.add(l)
End If
End With
End Sub
Надеюсь, это кому-то поможет.
Да, но в таком случае есть ли чистая альтернатива ClientScriptManager.RegisterClientScriptResource для использования CSS?