Compositional Controls (Cont.) - Page 9
August 9, 2002
Figure 6-2. Output of BlogClient.aspx
|
|
Displaying the blog entries is only half the battle. While it
would certainly be possible to edit the XML file directly in order to add a
new blog entry, it makes much more sense to make this a feature of the
control. This is what the NewBlog method does. In the NewBlog method, we
instantiate Label and TextBox controls for data entry and a Button control to
submit the new blog entry. When the Button is clicked, the Submit_Click event
handler method is called when the control is re-created on the server. The
Submit_Click event handler, in turn, calls the AddBlog method to insert a new
row into the BlogDS dataset and then writes the contents of the dataset back
to the underlying XML file. Before using the control, of course, we'll need to
compile it and place it in the application's bin
directory. The following snippet can be used to compile the control: csc /t:library /out:bin\blog.dll /r:system.dll,system.data.dll,
system.xml.dll,system.web.dll blog.cs
Example
6-8 shows the ASP.NET code necessary to instantiate the Blog control
programmatically. Note the use of the PlaceHolder control to precisely locate
the Blog control output. For this code to work correctly, the compiled
assembly containing the Blog control must reside in the application's
bin subdirectory.Figure
6-2 shows the output of the control when used in the client page shown in
Example
6-8.
Example 6-8: BlogClient.aspx <%@ Page Language="vb" debug="true" %>
<%@ Register TagPrefix="aspnetian" Namespace="aspnetian"
Assembly="NavBar" %>
<html>
<head>
<script runat="server">
Sub Page_Load( )
Dim Blog1 As New Blog( )
PH.Controls.Add(Blog1)
End Sub
</script>
</head>
<body>
<form runat="server">
<table border="1" width="100%" cellpadding="20" cellspacing="0">
<tr>
<td align="center" width="150">
<img src="aspnetian.jpg"/>
</td>
<td align="center">
<h1>Blog Display Page<h1>
</td>
</tr>
<tr>
<td width="150" valign="top">
<aspnetian:NavBar id="NB1" runat="server">
<strong>Navigation Bar</strong>
<br/>
</aspnetian:NavBar>
</td>
<td>
<asp:placeholder id="PH" runat="server"/>
</td>
</tr>
</table>
</form>
</body>
</html>
Example
6-9 shows the code necessary to instantiate the control declaratively. The
example uses the TagPrefix aspnetian2 because both
the NavBar control and the Blog control use the same namespace, but are
compiled into separate assemblies (which means that using the same TagPrefix
for both would result in an error).
Example 6-9: BlogAdd.aspx <%@ Page Language="vb" debug="true" %>
<%@ Register TagPrefix="aspnetian" Namespace="aspnetian"
Assembly="NavBar" %>
<%@ Register TagPrefix="aspnetian2" Namespace="aspnetian"
Assembly="Blog" %>
<html>
<head>
<script runat="server">
Sub Page_Load( )
'Uncomment the line below to explicitly create a blank
' XML file, then comment the line out again to run the control
'NB1.CreateBlankFile( )
End Sub
</script>
</head>
<body>
<form runat="server">
<table border="1" width="100%" cellpadding="20" cellspacing="0">
<tr>
<td align="center" width="150">
<img src="aspnetian.jpg"/>
</td>
<td align="center">
<h1>Blog Add Page<h1>
</td>
</tr>
<tr>
<td width="150" valign="top">
<aspnetian:NavBar id="NB1" runat="server">
<strong>Navigation Bar</strong>
<br/>
</aspnetian:NavBar>
</td>
<td>
<aspnetian2:Blog id="Blog1"
mode="Add"
addredirect="BlogClient.aspx"
email="graymad@att.net"
runat="server"/>
</td>
</tr>
</table>
</form>
</body>
</html>
As you can see, whether the control is used programmatically or
declaratively, the amount of code necessary to provide simple blogging
functionality is made trivial by the use of a custom server control. Note that
you can also have the same page use the Blog control in either Display or Add
mode, depending on the user's actions, as explained in the following section.
Compositional Controls (Cont.) - Page 8
ASP.NET in a Nutshell
Adding Design-Time Support -Page 10
|