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