Есть ли ClientScriptManager.RegisterClientScriptInclude, эквивалентный для CSS - PullRequest
11 голосов
/ 10 сентября 2008

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

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

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

Ответы [ 6 ]

7 голосов
/ 22 сентября 2008

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

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

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

7 голосов
/ 22 сентября 2008

Вы можете добавить ссылки на заголовки к файлам 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).

2 голосов
/ 19 августа 2010

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

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

2 голосов
/ 10 сентября 2008

Я использовал файлы CSS в качестве Встроенные ресурсы .

0 голосов
/ 14 июля 2010

Что я делаю, это использую

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

в голове и затем StringBuilder на PageLoad, который содержит сценарий динамического CSS.

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

cssLiteral.Text = str.ToString();
0 голосов
/ 22 сентября 2008

Еще одна мысль: вы можете рассмотреть «пространство имен» имен ваших классов, чтобы избежать коллизий с общими именами классов, которые ваши потребители уже могут использовать. Э.Г.

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