2009-03-30 5 views
3

해야합니다 I했습니다 순간에 아무것도하지 않는 JS 함수를 호출하는있는 TabContainerSys.InvalidOperationException : 처리기 함수

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
... 
.... 
<form id="form1" runat="server"> 
    <asp:ScriptManager ID="sm1" runat="server"></asp:ScriptManager> 
    <cc1:TabContainer runat="server" ID="tbcTabContainer" OnClientActiveTabChanged="ChangeTab()"></cc1:TabContainer> 
</form> 

포함 된 웹 페이지.

<script type="text/javascript"> 
function ChangeTab() 
{ 
    alert('Sucesss'); 
} 
</script> 

내 페이지로드시 코드에서 두 개의 탭 패널을 만들고 컨테이너에 추가하십시오. 자, 내 문제는 내가 탭을 변경하면 자바 스크립트 경고 상자가 표시되지만 한번 닫으면 오류가 발생합니다.

Microsoft JScript 런타임 오류 : Sys.InvalidOperationException : 처리기가 함수 여야합니다. 당신은 속성에서 괄호를 제거해야

답변

8

... 당신은 괄호를 추가 할 때 리터럴 메서드 호출은 단지 설명을위한

변경

OnClientActiveTabChanged="ChangeTab()" 

OnClientActiveTabChanged="ChangeTab" 

에 괄호가 없으면 메서드에 대한 참조이므로 이러한 할당은 대리자 (메서드 참조)를 기다리는 콜백과 같이 작동합니다. 대신 메소드 호출을 얻고 원래의 eval (호출이기 때문에)에서 실행 한 다음 실제 메소드 참조이기 때문에 제대로 호출하려고하면 실패합니다.

+0

올바른 :

또한, 함수 기술적 서버 측 이벤트 핸들러 유사하다 적절한 특성을 구현한다. 왜 궁금해하니? 함수가 매개 변수를 가지고 있지 않을 때 빈 paranthesis를 가진 정상적인 js와의 ok ok – user48408

+0

나는 왜에 관해서는 약간의 정보를 제공하기 위해 편집을했다. –

1

일반적으로 "ChangeTab()"은 실제로 "ChangeTab"이어야하므로 일반적으로 호출 할 함수 이름 만 입력하면됩니다. ChangeTab (발신자, E) ....