Подтвердить что ты не робот

Есть ли эквивалент ClientScriptManager.RegisterClientScriptInclude для CSS

Метод ClientScriptManager.RegisterClientScriptInclude позволяет зарегистрировать ссылку на JavaScript с объектом Page (проверка дубликатов).

Есть ли эквивалент этого метода для ссылок CSS?

Аналогичные вопросы относятся к ClientScriptManager.RegisterClientScriptBlock и ClientScriptManager.RegisterClientScriptResource

4b9b3361

Ответ 1

Короткий ответ: нет. Конечно, вы можете использовать свои собственные функции (как предлагает CMPalmer), чтобы использовать встроенные ресурсы CSS (как предлагает Gulzar) и вставлять их на страницу.

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

Разделительный стиль от разметки - это хорошая вещь - вы уже направились по правильному пути, избегая различных встроенных атрибутов стиля ASP.NET, но вы должны полностью отнестись к нему и оставить CSS вне вашего. длл.

Ответ 2

Вы можете добавить ссылки заголовков в файлы CSS в классах ASP.Net codebehind следующим образом:

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).

Ответ 4

Просто проверьте наличие зарегистрированного script, и если вы обнаружите, что его там нет, вы узнаете, что это первый раз, когда создается ваш элемент управления. В этот момент вы можете просто удалить литеральный элемент управления на своей странице, который указывает на требуемый файл 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

Надеюсь, это поможет кому-то.

Ответ 5

Еще одна мысль. Возможно, вы захотите рассмотреть "имена" имен ваших классов, чтобы избежать столкновений с общими именами классов, которые ваши потребители уже могут использовать. Например.

<div class="SmillerControls_Toolbar">
    <a class="SmillerControls_Button" ...>...</a>
    ...
</div>

или вы можете обернуть все это в одном классе "namespace", а затем напишите свой CSS:

 <div class="SmillerControls">
     <div class="Toolbar">
          <a class="Button" ...>...</a>
     </div>
 </div>

ваш CSS будет похож на

 div.SmillerControls div.Toolbar
 {
     ...
 }

 div.SmillerControls div.Toolbar a.Button
 {
     ...
 }

Ответ 6

Я использую

<asp:Literal id="cssliteral" runat="server" /> 

в голове, а затем StringBuilder на странице Load, которая содержит динамический css script.

StingBuilder str = new StringBuilder();
str.Append("<style type="text/css">");
str.Append(".myclass {background-color:#" + mycolor);
str.Append("</style>");

cssLiteral.Text = str.ToString();