2009-06-17 3 views
6

WebForm 이벤트 모델 (페이지 라이프 사이클이 아니라, .aspx 또는 .ascx 파일에서 선언적으로 지정 될 때 이벤트가 어떻게 연결되는지)을 완전히 이해하려고합니다.WebControl 이벤트의 접두어가 "On"인 이유는 무엇입니까?

예를 들어 Button 컨트롤을 사용하십시오. 코드 숨김에서 연결할 수있는 Click 이벤트가 있지만 .aspx/.ascx 파일에 "OnClick"이벤트가 있습니다.

.NET Reflector를 사용하고 Button 컨트롤에 PROTECTED OnClick 메서드를 사용할 수 있지만 .aspx/.ascx에 할당 할 수 없어야합니다. 누락 된 것이 아니라면

"On"접두사가 추가 된 이유는 누구입니까?

조금 명확히하기 위해 : 나는 명명 규칙이 작동하는 것을 이해합니다. 나는 .aspx/.ascx의 "OnClick"이 .Click + = new EventHandler (blahName)로 어떻게 변환되는지 알고 싶습니다. 나는. ControlChanged EventHandler를 만들면 OnControlChanged를 .aspx/.ascx 파일에 유효하게 표시하려면 특별한 작업을 수행해야합니까?

+0

또한보십시오 :> [ASP.NET 컨트롤의 이벤트 처리기 속성에 대한 속성은 어떻게 접두사 (Load 이벤트 처리기의 OnLoad)를 갖습니까?] (http://stackoverflow.com/questions/969128/how-come- the-attributes-for-event-handler-properties-on-asp-net-controls-have-ap) –

답변

4

사용자 정의 컨트롤의 이벤트가 선언 구문에서 자동으로 "On"접두사를 갖기 때문에 이름 지정 규칙 이상입니다.

예를 들어 ProjectSelected 이벤트를 선언하는 UserControl이 있습니다. 선언적으로 처리기를 추가하려면 OnProjectSelected 특성을 설정합니다.

UserControl을 : 선언적

 public event EventHandler<ProjectSelectedEventArgs> ProjectSelected; 

추가 핸들러 :

 <user:ProjectList id="uxProjectList" runat="server" 
      OnProjectSelected="uxProjectList_ProjectSelected" /> 

뒤에 코드에서 핸들러를 추가 :

 uxProjectList.ProjectSelected += uxProjectList_ProjectSelected; 

이 두 번 나를 지옥을 혼동 한 번 내가 나오지 않았어 때 이벤트가 선언적으로 제공되지 않는 이유를 파악하지 못하고 이벤트 이름을 "OnP rojectSelected "가되고 속성은"OnOnProjectSelected "가됩니다.

+0

사실 Visual Studio IDE에서 사용되는 규칙보다 조금 더 깊습니다. 이벤트 대 대리인 : http://blog.monstuff.com/archives/000040.html –

+0

@ Jason : 나는 그 기사를 전혀 알지 못했습니다. 이벤트의 이벤트 핸들러는 델리게이트에 의해 정의됩니다. 이벤트 핸들러 정의를 따르는 이벤트로 핸들러를 등록하십시오.이벤트를보다 쉽게 ​​처리 할 수 ​​있도록 일부 클래스는 재정의 가능한 "On [Event]"메서드를 호출하는 자체 이벤트를 처리하므로 소비자가 이벤트를 처리하는 대신 메서드를 재정의 할 수 있습니다. ASP.NET은 선언 구문을 허용하기 위해이 작업을 자동으로 수행합니다. –

+0

죄송합니다, 나는 그것이 귀하의 게시물에서 다루어지지 않았다고 느꼈으므로 (즉, "On"컨벤션을보다 명확하게해야 함) –

6

이벤트를 사용하여 호출 코드가 연결될 대리자에 대한 참조를 저장합니다. 이벤트 자체와 대리인을 구분하기 위해

+4

"클릭"은 클릭의 원인일지도 모르는 반면 "OnClick"은 클릭으로 인한 것입니다. – ChrisW

2

이벤트 발생시 사용되는 이름 지정 규칙입니다. OnSomethingHappened ... OnClick, OnChange, OnClose. 마법 같은 것이나 불길한 것이 없다고 생각합니다. 단지 대회 일뿐입니다.

0

의미 상 기본적으로 이것은 이벤트 수신기가 일반적으로 OnWhatever라고 불리는 VB 전통에 대한 오래된 실패입니다. 늙은 습관이 많이 죽는다.

관련 문제