2009-02-01 4 views
17

포함 된 스크립트 참조, 특히 jQuery가 viewstate 후에 렌더링됩니다. < 헤드에서이를 얻을 수있는 방법이 있습니까?>Page.ClientScript.RegisterClientScriptInclude를 머리에 포함시키는 방법?

Page.ClientScript.RegisterClientScriptInclude("jQuery", "/scripts/jquery.js"); 

사용자 정의 컨트롤의 페이지로드에 jquery.js를 등록하려고합니다.

미리 감사드립니다.

P. 그것을 (ClientScript로) 할 수 없다면, 사람들은 왜 그것을 구축하지 않았는지 알 수 있습니까?

UPDATE

내가 필요로하는 ClientScript 관리자의 주요 기능은 한 번 스크립트 만 포함 할 수 있다는 것입니다. 컨트롤은 한 페이지에 여러 번 나타날 수 있지만, 단지 하나의 jQuery 스크립트 만 포함하면됩니다.

답변

22

가 직접 inlcude하기를 머리 부분 :

HtmlGenericControl Include = new HtmlGenericControl("script"); 
Include.Attributes.Add("type", "text/javascript"); 
Include.Attributes.Add("src", sInclude); 
this.Page.Header.Controls.Add(Include); 

추가하기 전에 이미 확인하지 않으려면 확인하고 싶을 것입니다.

+0

내가 사용한 PlaceHolder를 우회하는 또 다른 완벽하게 유효한 방법입니다. –

+0

Glennular, 유일성 검사가 ClientScript의 유용한 비트 인 것 같습니다. – ccook

+0

많은 어려움을 겪은 후. 이것은 완벽한 해답입니다. – siddhusingh

8

이 문제는 오래전에 있었고 결국 RegisterClientScriptInclude를 사용하지 않았습니다.

페이지 머리글에 자리 표시자를 배치하고 HtmlGenericControl을 통해 자리 표시 자에 script 태그를 추가했습니다.

내 코드를 찾을 수 있는지 확인하고 그에 대한 답변을 수정하겠습니다.

편집 내 코드를 찾을 수 없습니다

, 그래서 난 그냥 다시 만들어 :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <asp:PlaceHolder runat="server" ID="HeadPlaceHolder"></asp:PlaceHolder> 
</head>  
<body> 
    ... 
</body> 
</html> 

그리고 뒤에 코드 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    HeadPlaceHolder.Controls.Add(/* Your control here */); 
} 
+0

감사합니다. 네, 제가 거기에서 읽고있는 모든 것은 그것이 머리로 렌더링되지 않을 것이라는 것을 나타냅니다. – ccook

+0

이것은 완벽했습니다. 자리 표시자는 스크립트가 머리에서 원하는 위치에 정확히 위치 할 때 유용합니다. 주로 깔끔함을 위해 사용되었습니다. 나는 또한 스타일 시트를 위해 별도의 것을 사용했다. Page.Header.Controls.Add 접근법은 끝에 만 추가되므로 모든 것이 뒤섞이는 경향이 있습니다. PlaceHolder를 사용하면 스크립트가 그룹화됩니다. 스타일 시트가 그룹화됩니다. – goodeye

1

Page.ClientScript를 사용하여 페이지 헤더에 스크립트를 추가하는 것은 불가능합니다.

3

안녕하세요, 오래된 질문입니다.하지만 이는 여전히 관심 대상입니다.

.net 3.5sp1을 사용하여 UserControl을 직접 만들고 있는데, 같은 문제가 발생했습니다. 다음 솔루션은 나를 위해 작동합니다.

이 코드는 UserControl 클래스에서이다 : 나는 중첩 페이지의 Page_Load를 호출하기 전에 수행해야합니다 좀 더 초기화를 할 필요가 있기 때문에

protected void Page_Init(object sender, EventArgs e) 
{ 
    const string scriptKey = "UserControlScript"; 

    if(!Page.ClientScript.IsClientScriptIncludeRegistered(Page.GetType(), scriptKey)) 
    { 
     Page.ClientScript.RegisterClientScriptInclude(Page.GetType(), scriptKey, ResolveClientUrl("~/js/UserControl.js")); 
    } 
} 

내가 Page_Init을 사용했다.

관련 문제