2014-09-07 3 views
0

이것은 사용자 지정 ASP.NET 컨트롤을 만드는 데있어서 처음 시도한 것으로 거의 균열이 있지만 마지막 장애물에 해당합니다.사용자 지정 Button 컨트롤이 OnClick 이벤트를 발생시키지 않습니다.

Button 클래스에서 상속되는 사용자 지정 컨트롤을 만들었습니다. RenderContent 나 RenderChildren을 사용하는 것을 배제하기 때문에 (버튼의 부모 태그에 분명히 들어가는) 버튼에 스타일을 추가하기 때문에 Render 메서드를 재정의했습니다. 그 부분은 모두 완벽하게 작동합니다.

문제는 Render 메서드를 재정의 할 때 내가 작성한 OnClick 메서드의 코드가 실행되도록하는 기본 렌더링 메서드에있는 것을 분명히 생략했기 때문입니다. 단순히 오버라이드 된 Render 메서드를 주석 처리하고 솔루션을 빌드하면 버튼이 완벽하게 작동합니다 (스타일 지정 제외). 내 오버라이드 된 Render 메서드에 MyBase.Render(writer)을 포함 시키려고했지만, Render 메서드의 내 코드가 RenderContent 메서드에있는 것처럼 더 많은 일을합니다.

그래서 단추 모양을 원하는대로 정확하게 설정할 수는 있지만 기능이 없거나 완벽하게 작동하지만 잘못 표시 될 수 있습니다. 빠진 퍼즐 조각은 뭐니? 다음과 같이 어떤, 방법을 렌더링 내 오버라이드 (override)에서 실종 :

Protected Overrides Sub Render(writer As HtmlTextWriter) 

    Dim cssclass As String 
    If ToggledOn = True Then 
     cssclass = ToggledOnCssClass 
    Else 
     cssclass = ToggledOffCssClass 
    End If 

    writer.AddAttribute(HtmlTextWriterAttribute.Class, cssclass) 
    writer.RenderBeginTag(HtmlTextWriterTag.Button) 
    writer.Write(ToggledOn.ToString) 
    writer.RenderEndTag() 

End Sub 

답변

0

다음과 같이 내가 방법을 렌더링보다는 RenderBeginTag 메서드를 재정 의하여 결국이 문제를 해결 가지고 :

Public Overrides Sub RenderBeginTag(writer As HtmlTextWriter) 

    Dim s As Style = New Style 
    If ToggledOn = True Then 
     s.CssClass = ToggledOnCssClass 
    Else 
     s.CssClass = ToggledOffCssClass 
    End If 

    s.AddAttributesToRender(writer) 
    MyBase.RenderBeginTag(writer) 

End Sub