2010-08-05 3 views
0

많은 ASP.NET 페이지 (.NET 2.0)를 사용할 때 일반적으로 내 코드 숨김은 페이지 객체에 이벤트 처리기로 채워집니다. GridView_RowCommand, Button_Click 등 모든 일반적인 용의자. EventHandler에서 파생 된 모든 것들이 공통적으로 가지는 한 가지는 첫 번째 인수가 일반적으로 "발신자"라고 표시된 객체라는 것입니다.ASP.NET에서 EventHandler의 "보낸 사람"개체를 사용해야하는 이유가 있습니까?

ASP.NET 코드 숨김에서 나는 그 점을 정말로 보지 못했습니다. GridCustomers_RowCommand가 있고 GridCustomers에 필요한 작업을 수행해야하는 경우 발신자를 Gridview로 캐스팅하는 것에 대해 걱정하지 않고 코드 숨김에서 액세스하여 작업 할 수 있습니다.

나는 여기에서 매우 중요한 디자인 고려를 놓치고 있어야하는 것처럼 느낀다. 내 코드에 냄새 나는 일을하고 있니? 이 방법으로 직접 참조를 사용하면 전역 객체에 대한 먹이감이 줄어들지 만, ASP.NET이 작동하는 방식을 알 수 있습니다. 나는 무엇을 여기에서 보지 않고 있냐? ASP.NET을 "올바른 방법"으로 사용하는 방법을 보여주는 멋진 책이나 자습서가 있습니까? 깨끗하고 민첩한 "실제 코더"방식?

답변

6

당신은 예를 들어, DRY coding에 대한 하나의 이벤트 핸들러, 아직 이벤트를 사용하여 20 가지가있을 수 있습니다 (이 예가 WebControls와 관련이 없습니다).

면책 조항 : 매일 sender을 사용합니까? 닫지 마시오. 유용할까요? 그렇습니다 :

+0

추가 면책 조항을 통해 나는 이것이 꽤 훌륭하고 포괄적 인 대답이라고 생각합니다. 나는 그것을 사용하는 여러 컨트롤의 경우를 고려하지 않았지만 gridview 또는 repeater처럼 매우 편리 할 수 ​​있습니다. 또한 컨트롤 이름을 직접 사용하는 사람이 내가 아는 것이 기쁘다. 기분이 훨씬 나아졌습니다. – CodexArcanum

1

예, 여러 컨트롤에서 호출하는 이벤트 처리기가 있고 이벤트 처리기라는 컨트롤이 무엇인지 알아야합니다.

거꾸로하는 것처럼 보이지만 몇 가지 사소한 차이점을 제외하면 이벤트 처리기가 대부분의 컨트롤에서 동일하면 반복 된 코드를 제거 할 수 있습니다.

그렇다면 실제 코드에서는 한 번만 본 적이 있습니다. 가독성에 문제가 있다고 생각했습니다. 컨트롤/이벤트 당 하나의 이벤트 처리기를 갖고 싶습니다. 한 번 코드를 작성하고이 경우

protected void AddClass(object sender, EventArgs e) { 
    ((WebControl)sender).CssClass += " myNewClass"; 
} 

을하지만, 많은 WebControls 사용할 수 있습니다 :

1

이벤트의 컨텍스트를 설정할 수 있도록 이벤트 서명의 sender 매개 변수가 제공됩니다.

ASP.NET 컨트롤 계층에 여러 개의 중첩 컨트롤이있어 특정 이벤트에 대해 동일한 이벤트 처리기를 모두 실행하는 경우 sender 매개 변수를 사용하면 다른 컨트롤을 구분할 수 있습니다.

가끔 서브 클래 싱 된 EventArgs 매개 변수는 더 깔끔한 방식으로 컨텍스트를 제공하지만 보낸 사람은 추상 이벤트 처리기에 여전히 유용합니다.

관련 문제