2008-09-10 21 views

Odpowiedz

7

Krótka odpowiedź: nie. Z pewnością można przetasować własne funkcje (jak sugeruje CMPalmer), aby wziąć zasoby osadzone w CSS (jak sugeruje Gulzar) i osadzić je na stronie.

Nie jestem jednak pewna, dlaczego chciałbyś to zrobić jako sprawę najlepszej praktyki. Jeśli robisz kontrolę wielokrotnego użytku, która ma wiele stylów CSS, moja rada byłaby po prostu zakodowanie nazw klas do zgodnego z normami wyjścia Twojego kontrolki i wysłanie kontroli wraz z sugerowanym arkuszem stylów. Daje to użytkownikom/klientom możliwość przesłonięcia sugerowanych stylów zgodnie z ich potrzebami i ogólnie pozwala im zarządzać konfiguracją CSS według własnego uznania.

Oddzielenie stylu od znaczników to dobra rzecz - jesteś już na dobrej drodze, unikając różnych wbudowanych atrybutów w stylu ASP.NET, ale powinieneś wziąć to wszystko i utrzymać CSS z dala od .dll.

2

Użyłem plików css jak Embedded resources.

+0

Tak, ale czy w takim przypadku istnieje czysta alternatywa dla ClientScriptManager.RegisterClientScriptResource dla użycia CSS? –

7

Można dodawać linki nagłówka do plików CSS w kodzie klas ASP.Net tak:

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

Można iterację kontrolnej nagłówka zawczasu sprawdzić, czy jest już tam. Pokazany przykład pochodzi z Page_Load w jednym z moich projektów i znajduje się w wyrażeniu warunkowym, które dodaje tylko EditStyles.css, jeśli strona ma być w trybie "Edycja".

Dla ClientScriptManager.RegisterClientScriptBlock i ClientScriptManager.RegisterClientScriptResource mają one równoważne funkcje do sprawdzania, czy zostały już zarejestrowane (np. IsClientScriptrResourceRegistered).

+0

zobacz metodę HeadContainsLinkHref w tej odpowiedzi: http://stackoverflow.com/questions/1510766/build-events-and-versioning-js-and-css-files. "sprawdź, czy już tam jest" – russau

0

Jeszcze jedna myśl: możesz chcieć rozważyć "nazwanie przestrzeni" nazwami klas, aby uniknąć kolizji ze zwykłymi nazwami klas, których mogą już używać Twoi konsumenci. Na przykład.

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

czy można zawinąć całość w jednej klasie "namespace", a następnie napisać CSS że:

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

Twój CSS byłoby jak

div.SmillerControls div.Toolbar 
{ 
    ... 
} 

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

Co ja do jest użycie

210 w głowie, a następnie StringBuilder na PageLoad, który zawiera dynamiczny skrypt css.
StingBuilder str = new StringBuilder(); 
str.Append("<style type="text/css">"); 
str.Append(".myclass {background-color:#" + mycolor); 
str.Append("</style>"); 

cssLiteral.Text = str.ToString(); 
2

Wystarczy sprawdzić, czy istnieje zarejestrowany skrypt, a jeśli okaże się, że go nie ma, to wiadomo, że po raz pierwszy twoja kontrola jest tworzona. W tym momencie możesz po prostu umieścić na stronie kontrolę dosłowną, która wskazuje na plik css, który chcesz.

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 

Mam nadzieję, że to komuś pomaga.

Powiązane problemy