自定义按钮控件不会触发OnClick事件

时间:2014-09-07 01:39:23

标签: asp.net custom-controls overrides

这是我第一次尝试创建一个自定义的ASP.NET控件,我几乎已经破解了它,但是我正陷入最后的障碍。

我创建了一个继承自Button类的自定义控件。我已经重写了Render方法,因为我想在按钮上添加样式,这显然位于按钮的父标记中,从而排除了使用RenderContent或RenderChildren(据我所知)。这一部分都很完美。

问题在于,在重写Render方法时,我显然省略了默认Render方法中的某些内容,该方法允许我编写的OnClick方法中的代码被触发。如果我只是注释掉我重写的Render方法并构建解决方案,那么按钮工作完美(除了样式)。我尝试在我重写的Render方法中包含MyBase.Render(writer),但这看起来更糟糕,更像是我的Render方法中的代码在RenderContent方法中。

所以,我可以让按钮看起来像我想要的但不是功能,或功能完美但看起来不对。这个谜题的缺失是什么?我重写的Render方法缺少的内容如下:

    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

1 个答案:

答案 0 :(得分:0)

我最终通过重写RenderBeginTag方法而不是Render方法解决了这个问题,如下所示:

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