Id and CssClass not defined

  • Thread starter Thread starter shapper
  • Start date Start date
S

shapper

Hello,

I created a custom control that inherits CompositeControl:

Public Class MySection
Inherits CompositeControl
...
Protected Overrides Sub CreateChildControls()
...
MyBase.CreateChildControls()
Me.ChildControlsCreated = True
End Sub

End Class MySection

When I use this control I define its ID and CssClass.
However, when I check the rendered output the ID and CssClass are not
defined.
What am I doing wrong?

Shoudn't this be working, since I am inheriting my control from
CompositeControl?

Thanks,
Miguel
 
Hi Shapper,

HTML output should be rendered as <span id="yourId"
class="yourclass"></span>. In addition, there's no need for setting
ChildControlsCreated to true because EnsureChildControls method does it for
you.
I'm guessing something else is causing problem, paste all the code.
 
Hi Shapper,

HTML output should be rendered as <span id="yourId"
class="yourclass"></span>. In addition, there's no need for setting
ChildControlsCreated to true because EnsureChildControls method does it for
you.
I'm guessing something else is causing problem, paste all the code.

Hi,

I think I found the problem. In my custom control I also have the
following:

Public Overloads Overrides Sub RenderBeginTag(ByVal writer As
HtmlTextWriter)
writer.RenderBeginTag(HtmlTextWriterTag.Div)
End Sub ' RenderBeginTag
Public Overloads Overrides Sub RenderEndTag(ByVal writer As
HtmlTextWriter)
writer.RenderEndTag()
End Sub ' RenderEndTag

I changed it to:

Public Overloads Overrides Sub RenderBeginTag(ByVal writer As
HtmlTextWriter)

With writer
If Me.ID <> Nothing
Then .AddAttribute(HtmlTextWriterAttribute.Id, Me.ID)
If Me.CssClass <> Nothing
Then .AddAttribute(HtmlTextWriterAttribute.Class, Me.CssClass)
End With
With writer
If Me.Width <> Nothing
Then .AddAttribute(HtmlTextWriterAttribute.Style, "width: " &
Me.Width.ToString)
End With

' Render begin tag
writer.RenderBeginTag(HtmlTextWriterTag.Div)

End Sub ' RenderBeginTag

Now it is working.

Am I doing this right? Do I really need to do this?

Thanks,
Miguel
 
You don't need to bacause cssclass and id are rendered automatically. In
order to change default span tag to div, override TagKey property:

protected readonly overrides property TagKey() as HtmlTextWriterTag
get
return HtmlTextWriterTag.Div
end get
end property

hope this helps
 
Back
Top