VB.NET HtmlTextWriter Example

Hypertext markup language (HTML)

You want to write HTML markup in your VB.NET program without having to deal with the syntax directly. With HtmlTextWriter, you can do this by adding elements with RenderBeginTag and RenderEndTag.

This VB tutorial shows HtmlTextWriter and requires System.Web.UI.

Example

This program introduces a GetDivElements function, which returns a string containing HTML div elements. In the function, we create a new StringWriter, which serves as the backing store of the HtmlTextWriter. Next, we create the HtmlTextWriter as pass it the StringWriter instance in its New function.

Program that uses HtmlTextWriter [VB.NET]

Imports System.IO
Imports System.Web.UI

Module Module1
    Dim _words As String() = {"dot", "net", "perls"}

    Function GetDivElements() As String
	Using sw As StringWriter = New StringWriter
	    Using ht As HtmlTextWriter = New HtmlTextWriter(sw)
		For Each word As String In _words

		    ' Create the div.
		    ht.AddAttribute(HtmlTextWriterAttribute.Class, "c")
		    ht.RenderBeginTag(HtmlTextWriterTag.Div)

		    ' Create the a.
		    ht.AddAttribute(HtmlTextWriterAttribute.Href, word)
		    ht.RenderBeginTag(HtmlTextWriterTag.A)

		    ' Create the img.
		    ht.AddAttribute(HtmlTextWriterAttribute.Src, word + ".png")
		    ht.AddAttribute(HtmlTextWriterAttribute.Width, "200")
		    ht.AddAttribute(HtmlTextWriterAttribute.Height, "150")
		    ht.RenderBeginTag(HtmlTextWriterTag.Img)

		    ' End all the tags.
		    ht.RenderEndTag()
		    ht.RenderEndTag()
		    ht.RenderEndTag()
		Next
	    End Using
	    Return sw.ToString()
	End Using
    End Function

    Sub Main()
	Console.WriteLine(GetDivElements())
    End Sub

End Module

Output

<div class="c">
	<a href="dot"><img src="dot.png" width="200" height="150" /></a>
</div><div class="c">
	<a href="net"><img src="net.png" width="200" height="150" /></a>
</div><div class="c">
	<a href="perls"><img src="perls.png" width="200" height="150" /></a>
</div>
Note

References: You may have a problem compiling this program. First, change the project's client profile to .NET 4.0, not the Client Profile. Next, add the reference System.Web.

Continuing on. In the loop body of GetDivElements, we see how you can use RenderBeginTag and RenderEndTag. With RenderBeginTag, you can pass a string of the element name or a constant value in the HtmlTextWriterTag enumeration. At the end of your code that sets up a tag, you must call RenderEndTag.

Question and answer

What about attributes? Attributes can be added before the RenderBeginTag function is called. We set up class attributes, href attributes, src attributes, and finally width and height attributes on each loop iteration.

Optimization

When using HtmlTextWriter, it is best to pass it a buffer you are already using instead of a StringWriter. The buffer must be derived from TextWriter. If you are unsure if your buffer will work, try passing it to HtmlTextWriter and seeing if the program compiles.

Summary

The VB.NET programming language

We used the HtmlTextWriter type from the System.Web namespace in the VB.NET language. With this type, we can programmatically generate HTML in-memory without having to deal with all those syntactic complexities of HTML: we can avoid the brackets and quotes and just write HTML based on where we want the elements to occur in the page structure.

VB.NET Tutorials
.NET