【问题标题】:Custom Button Control Doesn't Fire OnClick Event自定义按钮控件不会触发 OnClick 事件
【发布时间】:2014-09-07 01:39:22
【问题描述】:

这是我第一次尝试创建自定义 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

【问题讨论】:

    标签: asp.net custom-controls overriding


    【解决方案1】:

    我最终通过重写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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多