2008-09-10 3 views
11

ClientScriptManager.RegisterClientScriptInclude 메서드를 사용하면 Page 객체에 JavaScript 참조를 등록 (중복 확인) 할 수 있습니다.CSS에 대한 ClientScriptManager.RegisterClientScriptInclude가 있습니까

CSS 참조에는이 방법과 동일한 방법이 있습니까?

비슷한 질문은 내가 Embedded resources으로 CSS 파일을 사용하고 ClientScriptManager.RegisterClientScriptBlockClientScriptManager.RegisterClientScriptResource

답변

7

짧은 대답 : 아니오. CSS 자체 임베디드 리소스 (Gulzar가 제시 한대로)를 가져 와서 페이지에 임베드하는 기능을 (CMPalmer가 제안한대로) 확실히 롤백 할 수 있습니다.

그러나 최선의 방법으로, 왜 이렇게하고 싶은지 잘 모르겠습니다. CSS 스타일링이 많은 재사용 가능한 컨트롤을 만드는 중이면 클래스 이름을 컨트롤의 표준 호환 출력에 하드 코딩하고 제안 된 스타일 시트와 함께 컨트롤을 제공하는 것이 좋습니다. 이를 통해 사용자/고객은 제안 된 스타일을 자신의 필요에 맞게 재정의 할 수 있으며 일반적으로 CSS 설정을 관리 할 수 ​​있습니다.

마크 업과 스타일을 구분하는 것은 좋은 일입니다. 이미 다양한 기본 제공 ASP.NET 스타일 속성을 피하면서 올바른 방향으로 나아가고 있지만, 모든 방법을 통해 CSS를 유지해야합니다. .dll.

2

적용됩니다.

+0

예. 그렇지만 CSS 사용을 위해 ClientScriptManager.RegisterClientScriptResource의 깨끗한 대안이 있습니까? –

7

이 같은 ASP.Net의 코드 숨김 클래스에 CSS 파일에 헤더 링크를 추가 할 수 있습니다 : 그것은 이미 존재하는 경우

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)이 있습니다.

+0

이 답변의 HeadContainsLinkHref 메소드를 참조하십시오. http://stackoverflow.com/questions/1510766/build-events-and-versioning-js-and-css-files. "이미 있는지 확인하십시오" – russau

0

한 가지 더 생각해보십시오. 소비자가 이미 사용하고있는 공통 클래스 이름과의 충돌을 피하기 위해 클래스 이름의 "네임 스페이스"를 고려할 수 있습니다. 예 :

<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 
{ 
    ... 
} 
0

같은 것 내가 사용합니까?

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

을 사용하고 동적 CSS 스크립트가 포함 된 PageLoad의 StringBuilder를 사용합니다.

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

cssLiteral.Text = str.ToString(); 
2

등록 된 스크립트의 존재 여부 만 확인하면 거기에 없다는 것을 알게되면 컨트롤을 만드는 것이 처음입니다. 어느 시점에서 원하는 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 

희망이 있으면 도움이 될 것입니다.

관련 문제