2012-05-01 5 views
1

나는 웹 양식 사이트에서 일하고 있습니다. head 태그에는 runat 서버 attr이 있습니다. 마스터 페이지에서runat 서버 헤드 내의 ResolveClientUrl

<head runat="server"> 
    .. 
    <script src='<%= ResolveClientUrl("~/myscript.js") %>' type="text/javascript" > </script> 
</head> 

그러나, 나는 오류가 있어요 :

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 

내가 문제가 RUNAT 것을 발견을 나는이 같은은 .js 파일 ResolveClientUrl를 사용하기 위해 노력하고있어

서버, 그래서 머리 태그에서 삭제 ... 그리고 지금은 다음과 같은 오류 받고 있어요 : I에게, U를 그래서

Using themed css files requires a header control on the page. (e.g. <head runat="server" />). 

어떻게 할 수 runat 서버 헤드 안에 ResolveClientUrl이 있습니까?

UPDATE :

내가 마스터 페이지의 상단에있는 (잘 작동하는 것 같다)를 포함하여 스크립트를 추가했습니다 ..하지만 더 나은 솔루션이있을 수 있습니다.

<!-- #include file="myscript.js" --> 

답변

2

당신이 사용할 수있는 데이터 바인딩 :

<head ID="head" runat="server"> 
    .. 
    <script src='<%# ResolveClientUrl("~/myscript.js") %>' type="text/javascript" > </script> 
</head> 

그런 다음이 코드 숨김 (바람직하게는 페이지로드 이벤트 핸들러)에 :

head.DataBind() 
0

당신이 메시지를받을 이유가 있기 때문이다 코드 블록이 도입 될 때, 포함 된 runat = "server"컨트롤에 대한 ControlCollection은 렌더링 할 때 코어 프레임 워크가 복구 할 수없는 예기치 않은 조건을 방지하기 위해 잠글 수 있어야합니다. ore가 렌더링 코드 블록을 실행)

복잡한 것은 서버 컨트롤 컬렉션에 "자신을 추가"하려는 코드를 사용하는 경우입니다. 리터럴 및하지의 컨트롤 컬렉션을 잠금으로 우리가 프레임 워크를 추진했습니다 그래서 지금

<head runat="server"> 
    <title></title> 
    <asp:Literal runat="server" id="SCRIPTLIT1"> 
    <script src='<%# ResolveClientUrl("~/myscript.js") %>' type="text/javascript"></script> 
    </asp:Literal> 

<!-- ...other stuff --> 
    <asp:ContentPlaceholder runat="server" id="head"></asp:ContentPlaceholder> 
</head> 

:이 문제를 방지하려면

는 가장 좋은 방법은 머리에 Literal 컨트롤에 코드 블록을 래핑하는 것입니다 < head runat = "server"> 컨트롤 컬렉션입니다.