Read Build Your Own ASP.NET 3.5 Website Using C# & VB Online
Authors: Cristian Darie,Zak Ruvalcaba,Wyatt Barnett
Tags: #C♯ (Computer program language), #Active server pages, #Programming Languages, #C#, #Web Page Design, #Computers, #Web site development, #internet programming, #General, #C? (Computer program language), #Internet, #Visual BASIC, #Microsoft Visual BASIC, #Application Development, #Microsoft .NET Framework
Figure 4.10. A simple form
Figure 4.11. Creating a new Web User Control
Name the file SmartBox.ascx. Then, add the control’s constituent controls—a Label
control and a TextBox control—as shown below (for both VB and C# versions):
Visual Basic
LearningASP\VB\SmartBox.ascx
(excerpt)
<%@ Control Language="VB" ClassName="SmartBox" %>
Label Widths in Firefox
Unfortunately, setting the Width property of the Label control doesn’t guarantee
that the label will appear at that width in all browsers. The current version of
Firefox, for example, will not display the above label in the way it appears in Internet Explorer. To get around this pitfall, you should use a CSS style sheet and the CssClass
property, which we’ll take a look at later in this chapter.
In
Chapter 3
we discussed properties briefly, but we didn’t explain how you could create your own properties within your own classes. So far, you’ve worked with
many properties of the built-in controls. For example, you’ve seen a lot of code that
sets the Text property of the Label control.
As a web user control is a class, it can also have methods, properties, and so on.
Our SmartBox control extends the base System.Web.UI.UserControl class by adding
two properties:
■ LabelText is a write-only property that allows the forms using the control to set
the control’s label text.
■ Text is a read-only property that returns the text the user typed into the text box.
Let’s add a server-side script element that will give our control two properties—one
called Text, for the text in the TextBox, and one called LabelText, for the text in
the Label:
Licensed to [email protected]
Constructing ASP.NET Web Pages
137
Visual Basic
LearningASP\VB\SmartBox.ascx
(excerpt)
<%@ Control Language="VB" ClassName="SmartBox" %>
C#
LearningASP\CS\SmartBox.ascx
(excerpt)
<%@ Control Language="C#" ClassName="SmartBox" %>
Licensed to [email protected]
138
Build Your Own ASP.NET 3.5 Web Site Using C# & VB
Just like web forms, web user controls can work with code-behind files, but, in an
effort to keep our examples simple, we aren’t using them here. We’ll meet more
complex web user controls in the chapters that follow.
When you use the SmartBox control in a form, you can set its label and have the
text entered by the user, like this:
Visual Basic
mySmartBox.LabelText = "Address:"
userAddress = mySmartBox.Text
C#
mySmartBox.LabelText = "Address:";
userAddress = mySmartBox.Text;
Let’s see how we implemented this functionality. In .NET, properties can be readonly, write-only, or read-write. In many cases, you’ll want to have properties that can be both readable and writeable, but in this case, we want to be able to set the
text of the inner Label, and to read the text from the TextBox.
To define a write-only property in VB, you need to use the WriteOnly modifier.
Write-only properties need only define a special block of code that starts with the
keyword Set. This block of code, called an
accessor
, is just like a subroutine that
takes as a parameter the value that needs to be set. The block of code uses this value
to perform the desired action—in the case of the LabelText property, the action
sets the Text property of our Label control, as shown below:
Licensed to [email protected]
Constructing ASP.NET Web Pages
139
Visual Basic
LearningASP\VB\SmartBox.ascx
(excerpt)
Public WriteOnly Property LabelText() As String
Set(ByVal value As String)
myLabel.Text = value
End Set
End Property
Assuming that a form uses a SmartBox object called mySmartBox, we could set the
Text property of the Label like this:
Visual Basic
mySmartBox.LabelText = "Address:"
When this code is executed, the Set accessor of the LabelText property is executed
with its
value
parameter set to Address:. The Set accessor uses this value to set
the Text property of the Label.
The other accessor you can use when defining properties is Get, which allows us
to read values instead of writing them. Obviously, you aren’t allowed to add a Get
accessor to a WriteOnly property, but one is required for a ReadOnly property, such
as Text:
Visual Basic
LearningASP\VB\SmartBox.ascx
(excerpt)
Public ReadOnly Property Text() As String
Get
Text = myTextBox.Text
End Get
End Property
The Text property is ReadOnly, but it doesn’t need to be. If you wanted to allow the
forms using the control to set some default text to the TextBox, you’d need to add
a Set accessor, and remove the ReadOnly modifier.
When you’re defining a property in C#, you don’t need to set any special modifiers,
such as ReadOnly or WriteOnly, for read-only or write-only properties. A property
that has only a get accessor will, by default, be considered read-only:
Licensed to [email protected]
140
Build Your Own ASP.NET 3.5 Web Site Using C# & VB
C#
LearningASP\CS\SmartBox.ascx
(excerpt)
public string Text
{
get
{
return myTextBox.Text;
}
}
Likewise, a property that has only a set accessor will be considered to be writeonly:
C#
LearningASP\CS\SmartBox.ascx
(excerpt)
public string LabelText
{
set
{
myLabel.Text = value;
}
}
Using the Web User Control
Once the user control has been created, it can be referenced from any ASP.NET
page using the Register directive, as follows:
<%@ Register TagPrefix="
prefix
" TagName="
name
"
Src="
source.ascx
" %>
The Register directive requires three attributes:
TagPrefix
the prefix for the user control, which allows you to group related controls together, and avoid naming conflicts
TagName
the control’s tag name, which will be used when the control is added to the
ASP.NET page
Licensed to [email protected]
Constructing ASP.NET Web Pages
141
Src
the path to the
.ascx
file that describes the user control
After we register the control, we create instances of it using the <
TagPrefix
:
TagName
> format. Let’s try an example that uses the SmartBox control. Create a Web Form
named
ControlTest.aspx
in your project folder, and give it this content:
Visual Basic
LearningASP\VB\ControlTest.aspx
<%@ Page Language="VB" %>
<%@ Register TagPrefix="sp" TagName="SmartBox"
Src="SmartBox.ascx" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Creating this page by hand will really help you to understand the process of building
a web form. In time, you’ll learn how to use Visual Web Developer to do part of the
work for you. For example, you can drag a user control from
Solution Explorer
and
drop it onto a web form; Visual Web Developer will register the control and add an
Licensed to [email protected]
142
Build Your Own ASP.NET 3.5 Web Site Using C# & VB
instance of the control for you. Loading this page will produce the output we saw
Now, this is a very simple example indeed, but we can easily extend it for other
purposes. You can see in the above code snippet that we set the LabelText property
directly using the control’s attributes; however, we could have accessed the properties from our code instead. Here’s an example of in which we set the LabelText properties of each of the controls using VB and C#:
Visual Basic
C#
Master Pages
Master pages an important feature that was introduced in ASP.NET 2.0. Master
pages are similar to web user controls in that they, too, are composed of HTML and
other controls; they can be extended with the addition of events, methods, or
properties; and they can’t be loaded directly by users—instead, they’re used as
building blocks to design the structure of your web forms.
Licensed to [email protected]
Constructing ASP.NET Web Pages
143
A master page is a page template that can be applied to give many web forms a
consistent appearance. For example, a master page can set out a standard structure