2009-02-25 2 views
6

Мне нужно добавить страницу из пользовательского элемента управления. Я не могу использовать таблицу стилей (.css), потому что я использую url (...) и вам нужно разрешить URL.ASP.NET 2.0 динамически добавляет стили к странице в элементе управления

Прямо сейчас я делаю:

Page.Header.Controls.Add(new LiteralControl("<style type='text/css'>.xyz { color: blue; }</style>")); 

Но я надеюсь, что-то прикосновение более элегантной?

ответ

3

Я думаю, это не плохое решение проблемы. Если вы имели внешний файл таблицы стилей, этот кусок кода будет делать работу:

HtmlLink cssRef = new HtmlLink(); 
cssRef.Href = "styles/main.css"; 
cssRef.Attributes["rel"] = "stylesheet"; 
cssRef.Attributes["type"] = "text/css"; 
Page.Header.Controls.Add(cssRef); 

Другая идея заключается в том, чтобы написать свой собственный ASP.NET ServerControl «HtmlInlineStyle», так что вы могли бы назвать это таким образом, (теги сценария будет сделано вашим управлением сервера):

Page.Header.Controls.Add(
    New HtmlInlineStyle(".xyz { width:300px;padding-left:10px }"); 

Это blog entry и комментарии показаны некоторые альтернативы (ScriptManager.RegisterClientScriptBlock). Но, на мой взгляд, ваше решение в порядке.

+0

Что такое HtmlInlineStyle? Я не могу найти этот класс. –

+0

@AntonPutov В .NET Framework такого класса нет. Было предложено написать собственный серверный контроль. – splattne

1

Вот еще один способ ... Например:

Родитель ASPX часть:

<div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
    <span>abc</span> 
</div> 

В контроле:

Dim xyzStyle As New Style() 
xyzStyle.CssClass = "xyz" 
xyzStyle.BackColor = Drawing.Color.LightBlue 
Page.Header.StyleSheet.CreateStyleRule(xyzStyle, Nothing, ".xyz") 

Заметим, что это предполагает, что ASPX страница родитель имеет класса для целевого элемента управления. Если нет, то вам нужно будет слить стиль с помощью метода MergeStyle. (Для этого требуется, чтобы управление было runat="server").

Этот код делает следующий вывод: (Отображение весь источник для вашего удобства)

<html> 
<head> 
    <title>Untitled Page </title> 
    <style type="text/css"> 
    .xyz { background-color:LightBlue; } 
    </style> 
</head> 
<body> 
    <form name="form1" method="post" action="MyPage.aspx" id="form1"> 
    <div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
     <span>abc</span> 
    </div> 
    </form> 
</body> 
</html> 
+1

Да ... Я нашел CreateStyleRule, но был очень раздражен, увидев, что он не предоставил способ предоставить дополнительную настройку строки «styles». Атрибуты стиля, которые мне нужны, в основном не являются частью объекта Style(). – user53794

+0

Хммм ... совершенно верно. Я не нашел пути решения этой проблемы. – Cerebrus

0

я создаю свой собственный класс и наследование стиля, с моим собственным словарем для атрибутов класса стилей по умолчанию не включает. Вот краткий пример ...

   protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver) 
    { 
     Dictionary<String, String> _styles = new Dictionary<string, string>(); 
     _styles.Add("display", "inline-block"); 
     foreach (String s in _styles.Keys) 
     { 
      attributes[s] = (String)_styles[s]; 
     } 
     base.FillStyleAttributes(attributes, urlResolver); 
    } 
Смежные вопросы