2009-04-07 3 views
6

는 내가 코드 숨김에서 body 요소에 액세스 할 수 있어야하기 때문에이 runat="server" 설정 한몸 RUNAT = "서버"원인 컴파일 오류

<body id="body" runat="server"> 

다음과 같은 마크 업을 가지고있다.

나는 지금처럼 body onload 이벤트에 자바 스크립트 함수 호출을 추가하고 싶습니다 : 그러나

<body id="body" runat="server" onload="someJavaScriptFunction();"> 

, 이것은 기호 someJavaScriptFunction를 확인할 수 없습니다 "라는 메시지와 함께, 내 컴파일 오류를주고있다() ; " 응용 프로그램을 실행하면 오류가 발생합니다.

Compiler Error Message: CS1026:) expected

여기 무슨 일이 일어나고 있습니까? onload은 클라이언트 측 이벤트이므로 ASP.NET 컴파일러가이 문제에 대해 왜 신경을 씁니까?

답변

15

코드 뒤에이 코드를 추가해야합니다. 태그에 runat="server" 추가

protected void Page_Load(object sender, EventArgs e) 
{ 
    body.Attributes.Add("onload", "someJavaScriptFunction();"); 
} 

는 명시 적으로 접두사들 (예를 들어, <asp:Panel />) 중 하나가 아닌 경우에도, 그것은 서버 태그합니다. 서버 태그에서 onXXXX 이벤트 처리기는 클라이언트 측 이벤트가 아니라 서버 측 이벤트를 처리합니다 (버튼에 대해 OnClientClick과 같이 "클라이언트"가 명시 적으로 호출 된 경우 제외). ASP 페이지에서 코드의 일부로서 body 태그 내부에 스크립트를 해석하려고하기 때문에 이런 일이

<head> 
    <script language="text/javascript"> 
    window.onload = function() { someJavaScriptFunction(); } 
    </script> 
</head> 

:

+0

좋아, 어떻게 작동하는지 알 수 있습니다.하지만 runat = "server"를 추가하면 왜이 방법을 사용해야합니까? –

+0

"서버에서 실행"한다고 말했기 때문에 코드에서 Body_SomeJavaScriptFunction 메서드를 찾고 있기 때문에 생각합니다. –

+0

맞음 ... 나는 당신의 대답을 덧붙였다. Ian, 괜찮 으면 좋겠다. :) –

3

이 설정할 수있는 옵션도 있습니다. 마치 C#/VB ...

+0

"여기에 무슨 일이 일어나고있는거야?" "왜 ASP.NET 컴파일러가이 문제에 관심을 갖습니까?" – Cerebrus

+0

이것은 내가 결국 시나리오에 들어간 접근법입니다. –