472,090 Members | 1,336 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,090 software developers and data experts.

Loading UserControl using New Contructor

Joe
Hello All:

Do I have to use the LoadControl method of the Page to load a UserControl?

I have a class which contains three methods (one public and two private).
The class acts as a control server. It "serves" back the required control
(either WebControl or UserControl) based on the contents of an xml file. The
code in the webform places each control in a TableCell.

My problem is that the control server works as far as returning the correct
control; but when I view the webform, the UserControl is nowhere to be found.
It's not on the page and not in the View Source.

Here is the server code (I'm not posting GetWebControl here):

Public Function GetControl(ByVal NodeToRender As XmlNode) As
Web.UI.Control
Dim ValueToMatch As String
If NodeToRender.Name.Equals("DisplayText") Then
ValueToMatch = NodeToRender.Name.ToLower
Else
ValueToMatch = NodeToRender.Attributes("type").Value.ToLower
End If
Select Case ValueToMatch.ToLower
Case "label", "textbox", "checkbox", "displaytext"
Return GetWebControl(NodeToRender)

Case "customaddresses"
Return GetUserControl(NodeToRender)

End Select
End Function

Private Function GetUserControl(ByVal NodeToRender As XmlNode) As
Web.UI.UserControl
Dim uControl As New CustomAddresses

uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
Return uControl
End Function

Here is the code and HTML for the UserControl (called CustomAddresses):

Public Class CustomAddresses
Inherits System.Web.UI.UserControl

Public Sub New()
Addr1 = New TextBox
Addr2 = New TextBox
Addr3 = New TextBox
Addr4 = New TextBox
End Sub

Public Sub PopulateAddressBoxes(ByVal str As String)
Dim SelectedValue() As String = str.Split(("/").ToCharArray())
Dim Name As String = SelectedValue(0).Trim
Dim Address() As String = SelectedValue(1).Split((",").ToCharArray())
Dim Addr1 As String = Address(0).Trim
Dim Addr2 As String = Address(1).Trim
Dim City As String = Address(Address.Length - 3).Trim
Dim StateProvCd As String = Address(Address.Length - 2).Trim
Dim PostalCode As String = Address(Address.Length - 1).Trim

Me.Addr1.Text = Name
Me.Addr2.Text = Addr1
If Not Addr2.Equals(City) Then
Me.Addr3.Text = Addr2
Me.Addr4.Text = City & " " & StateProvCd & ", " & PostalCode
Else
Me.Addr3.Text = City & " " & StateProvCd & ", " & PostalCode
End If
End Sub
End Class

<%@ Control Language="vb" AutoEventWireup="false"
Codebehind="CustomAddresses.ascx.vb" Inherits="WBMI.Claims.CustomAddresses"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<TABLE class="interior" id="Table1" width="100%">
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr1" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr2" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr3" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr4" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
</TABLE>

Here's a sample of the webform code that calls these:

If TypeOf SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
WebControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
WebControl)

ElseIf TypeOf
SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
UserControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
UserControl)

End If
NewCell.Controls.Add(ControlToRender)

What this boils down to is that I want to create and utilize a ControlServer
class to encapsulate the details about how a control is created and returned.

Can this be done?

TIA,
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
Dec 22 '05 #1
12 2063
Joe
I figured out that I have to override the Render method in the UserControl.

I do not really understand the HtmlTextWriter. How do I write populated
TextBox controls to the webform?

Thank you for any available help.
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Joe" wrote:
Hello All:

Do I have to use the LoadControl method of the Page to load a UserControl?

I have a class which contains three methods (one public and two private).
The class acts as a control server. It "serves" back the required control
(either WebControl or UserControl) based on the contents of an xml file. The
code in the webform places each control in a TableCell.

My problem is that the control server works as far as returning the correct
control; but when I view the webform, the UserControl is nowhere to be found.
It's not on the page and not in the View Source.

Here is the server code (I'm not posting GetWebControl here):

Public Function GetControl(ByVal NodeToRender As XmlNode) As
Web.UI.Control
Dim ValueToMatch As String
If NodeToRender.Name.Equals("DisplayText") Then
ValueToMatch = NodeToRender.Name.ToLower
Else
ValueToMatch = NodeToRender.Attributes("type").Value.ToLower
End If
Select Case ValueToMatch.ToLower
Case "label", "textbox", "checkbox", "displaytext"
Return GetWebControl(NodeToRender)

Case "customaddresses"
Return GetUserControl(NodeToRender)

End Select
End Function

Private Function GetUserControl(ByVal NodeToRender As XmlNode) As
Web.UI.UserControl
Dim uControl As New CustomAddresses

uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
Return uControl
End Function

Here is the code and HTML for the UserControl (called CustomAddresses):

Public Class CustomAddresses
Inherits System.Web.UI.UserControl

Public Sub New()
Addr1 = New TextBox
Addr2 = New TextBox
Addr3 = New TextBox
Addr4 = New TextBox
End Sub

Public Sub PopulateAddressBoxes(ByVal str As String)
Dim SelectedValue() As String = str.Split(("/").ToCharArray())
Dim Name As String = SelectedValue(0).Trim
Dim Address() As String = SelectedValue(1).Split((",").ToCharArray())
Dim Addr1 As String = Address(0).Trim
Dim Addr2 As String = Address(1).Trim
Dim City As String = Address(Address.Length - 3).Trim
Dim StateProvCd As String = Address(Address.Length - 2).Trim
Dim PostalCode As String = Address(Address.Length - 1).Trim

Me.Addr1.Text = Name
Me.Addr2.Text = Addr1
If Not Addr2.Equals(City) Then
Me.Addr3.Text = Addr2
Me.Addr4.Text = City & " " & StateProvCd & ", " & PostalCode
Else
Me.Addr3.Text = City & " " & StateProvCd & ", " & PostalCode
End If
End Sub
End Class

<%@ Control Language="vb" AutoEventWireup="false"
Codebehind="CustomAddresses.ascx.vb" Inherits="WBMI.Claims.CustomAddresses"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<TABLE class="interior" id="Table1" width="100%">
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr1" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr2" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr3" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr4" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
</TABLE>

Here's a sample of the webform code that calls these:

If TypeOf SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
WebControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
WebControl)

ElseIf TypeOf
SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
UserControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
UserControl)

End If
NewCell.Controls.Add(ControlToRender)

What this boils down to is that I want to create and utilize a ControlServer
class to encapsulate the details about how a control is created and returned.

Can this be done?

TIA,
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation

Dec 22 '05 #2
Can you clarify more why you don't want to call LoadControl to load the
control. The reason LoadControl exists is so that ASP.NET has the ability
to prepare the object has it expects such as loading the ASCX and creating
an object model. If you create one with a constructor, then you prevent the
engine from doing what it was suppose to.

All controls have the Render method, but you should not override that in a
usercontrol. There are such things as custom web controls which inherit
from WebControl which you can then override the Render method.

All the HtmlTextWriter does is allow you to output the HTML. A textbox is
nothing more than <input type="text" value="something"/>.
"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:0F**********************************@microsof t.com...
I figured out that I have to override the Render method in the UserControl.

I do not really understand the HtmlTextWriter. How do I write populated
TextBox controls to the webform?

Thank you for any available help.
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Joe" wrote:
Hello All:

Do I have to use the LoadControl method of the Page to load a
UserControl?

I have a class which contains three methods (one public and two private).
The class acts as a control server. It "serves" back the required
control
(either WebControl or UserControl) based on the contents of an xml file.
The
code in the webform places each control in a TableCell.

My problem is that the control server works as far as returning the
correct
control; but when I view the webform, the UserControl is nowhere to be
found.
It's not on the page and not in the View Source.

Here is the server code (I'm not posting GetWebControl here):

Public Function GetControl(ByVal NodeToRender As XmlNode) As
Web.UI.Control
Dim ValueToMatch As String
If NodeToRender.Name.Equals("DisplayText") Then
ValueToMatch = NodeToRender.Name.ToLower
Else
ValueToMatch = NodeToRender.Attributes("type").Value.ToLower
End If
Select Case ValueToMatch.ToLower
Case "label", "textbox", "checkbox", "displaytext"
Return GetWebControl(NodeToRender)

Case "customaddresses"
Return GetUserControl(NodeToRender)

End Select
End Function

Private Function GetUserControl(ByVal NodeToRender As XmlNode) As
Web.UI.UserControl
Dim uControl As New CustomAddresses

uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
Return uControl
End Function

Here is the code and HTML for the UserControl (called CustomAddresses):

Public Class CustomAddresses
Inherits System.Web.UI.UserControl

Public Sub New()
Addr1 = New TextBox
Addr2 = New TextBox
Addr3 = New TextBox
Addr4 = New TextBox
End Sub

Public Sub PopulateAddressBoxes(ByVal str As String)
Dim SelectedValue() As String = str.Split(("/").ToCharArray())
Dim Name As String = SelectedValue(0).Trim
Dim Address() As String =
SelectedValue(1).Split((",").ToCharArray())
Dim Addr1 As String = Address(0).Trim
Dim Addr2 As String = Address(1).Trim
Dim City As String = Address(Address.Length - 3).Trim
Dim StateProvCd As String = Address(Address.Length - 2).Trim
Dim PostalCode As String = Address(Address.Length - 1).Trim

Me.Addr1.Text = Name
Me.Addr2.Text = Addr1
If Not Addr2.Equals(City) Then
Me.Addr3.Text = Addr2
Me.Addr4.Text = City & " " & StateProvCd & ", " & PostalCode
Else
Me.Addr3.Text = City & " " & StateProvCd & ", " & PostalCode
End If
End Sub
End Class

<%@ Control Language="vb" AutoEventWireup="false"
Codebehind="CustomAddresses.ascx.vb"
Inherits="WBMI.Claims.CustomAddresses"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<TABLE class="interior" id="Table1" width="100%">
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr1" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr2" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr3" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr4" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
</TABLE>

Here's a sample of the webform code that calls these:

If TypeOf SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
Is
WebControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
WebControl)

ElseIf TypeOf
SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
UserControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
UserControl)

End If
NewCell.Controls.Add(ControlToRender)

What this boils down to is that I want to create and utilize a
ControlServer
class to encapsulate the details about how a control is created and
returned.

Can this be done?

TIA,
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation

Dec 22 '05 #3
Joe
Hi Peter,

We are using an xml document to "drive" the creation of web pages. The
document defines what controls to include on a webform and where where the
controls will appear.

I have alot of lead-way in defining how the document will be structured and
used.

My idea was to have a class to encapsulate the generation of the required
control (be it a WebControl or a UserControl) and returns it to the webform.
In this app, a UserControl is just a grouping of WebControls. For example,
one UserControl (CustomAddresses) is four textbox server controls grouped
together for name, address1, address2 and city-state-zip. This will be used
on the page when it will display a person's addresses.

Does this help you understand hat I am really trying to do?
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Peter Rilling" wrote:
Can you clarify more why you don't want to call LoadControl to load the
control. The reason LoadControl exists is so that ASP.NET has the ability
to prepare the object has it expects such as loading the ASCX and creating
an object model. If you create one with a constructor, then you prevent the
engine from doing what it was suppose to.

All controls have the Render method, but you should not override that in a
usercontrol. There are such things as custom web controls which inherit
from WebControl which you can then override the Render method.

All the HtmlTextWriter does is allow you to output the HTML. A textbox is
nothing more than <input type="text" value="something"/>.
"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:0F**********************************@microsof t.com...
I figured out that I have to override the Render method in the UserControl.

I do not really understand the HtmlTextWriter. How do I write populated
TextBox controls to the webform?

Thank you for any available help.
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Joe" wrote:
Hello All:

Do I have to use the LoadControl method of the Page to load a
UserControl?

I have a class which contains three methods (one public and two private).
The class acts as a control server. It "serves" back the required
control
(either WebControl or UserControl) based on the contents of an xml file.
The
code in the webform places each control in a TableCell.

My problem is that the control server works as far as returning the
correct
control; but when I view the webform, the UserControl is nowhere to be
found.
It's not on the page and not in the View Source.

Here is the server code (I'm not posting GetWebControl here):

Public Function GetControl(ByVal NodeToRender As XmlNode) As
Web.UI.Control
Dim ValueToMatch As String
If NodeToRender.Name.Equals("DisplayText") Then
ValueToMatch = NodeToRender.Name.ToLower
Else
ValueToMatch = NodeToRender.Attributes("type").Value.ToLower
End If
Select Case ValueToMatch.ToLower
Case "label", "textbox", "checkbox", "displaytext"
Return GetWebControl(NodeToRender)

Case "customaddresses"
Return GetUserControl(NodeToRender)

End Select
End Function

Private Function GetUserControl(ByVal NodeToRender As XmlNode) As
Web.UI.UserControl
Dim uControl As New CustomAddresses

uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
Return uControl
End Function

Here is the code and HTML for the UserControl (called CustomAddresses):

Public Class CustomAddresses
Inherits System.Web.UI.UserControl

Public Sub New()
Addr1 = New TextBox
Addr2 = New TextBox
Addr3 = New TextBox
Addr4 = New TextBox
End Sub

Public Sub PopulateAddressBoxes(ByVal str As String)
Dim SelectedValue() As String = str.Split(("/").ToCharArray())
Dim Name As String = SelectedValue(0).Trim
Dim Address() As String =
SelectedValue(1).Split((",").ToCharArray())
Dim Addr1 As String = Address(0).Trim
Dim Addr2 As String = Address(1).Trim
Dim City As String = Address(Address.Length - 3).Trim
Dim StateProvCd As String = Address(Address.Length - 2).Trim
Dim PostalCode As String = Address(Address.Length - 1).Trim

Me.Addr1.Text = Name
Me.Addr2.Text = Addr1
If Not Addr2.Equals(City) Then
Me.Addr3.Text = Addr2
Me.Addr4.Text = City & " " & StateProvCd & ", " & PostalCode
Else
Me.Addr3.Text = City & " " & StateProvCd & ", " & PostalCode
End If
End Sub
End Class

<%@ Control Language="vb" AutoEventWireup="false"
Codebehind="CustomAddresses.ascx.vb"
Inherits="WBMI.Claims.CustomAddresses"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<TABLE class="interior" id="Table1" width="100%">
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr1" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr2" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr3" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
<TR>
<TD class="tabledata">
<asp:TextBox id="Addr4" runat="server" Width="361px" ReadOnly="False"
MaxLength="60"></asp:TextBox></TD>
</TR>
</TABLE>

Here's a sample of the webform code that calls these:

If TypeOf SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
Is
WebControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
WebControl)

ElseIf TypeOf
SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
UserControl Then
ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
UserControl)

End If
NewCell.Controls.Add(ControlToRender)

What this boils down to is that I want to create and utilize a
ControlServer
class to encapsulate the details about how a control is created and
returned.

Can this be done?

TIA,
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation


Dec 22 '05 #4
I don't think this explains why you are against using LoadControl.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:14**********************************@microsof t.com...
Hi Peter,

We are using an xml document to "drive" the creation of web pages. The
document defines what controls to include on a webform and where where the
controls will appear.

I have alot of lead-way in defining how the document will be structured
and
used.

My idea was to have a class to encapsulate the generation of the required
control (be it a WebControl or a UserControl) and returns it to the
webform.
In this app, a UserControl is just a grouping of WebControls. For
example,
one UserControl (CustomAddresses) is four textbox server controls grouped
together for name, address1, address2 and city-state-zip. This will be
used
on the page when it will display a person's addresses.

Does this help you understand hat I am really trying to do?
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Peter Rilling" wrote:
Can you clarify more why you don't want to call LoadControl to load the
control. The reason LoadControl exists is so that ASP.NET has the
ability
to prepare the object has it expects such as loading the ASCX and
creating
an object model. If you create one with a constructor, then you prevent
the
engine from doing what it was suppose to.

All controls have the Render method, but you should not override that in
a
usercontrol. There are such things as custom web controls which inherit
from WebControl which you can then override the Render method.

All the HtmlTextWriter does is allow you to output the HTML. A textbox
is
nothing more than <input type="text" value="something"/>.
"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:0F**********************************@microsof t.com...
>I figured out that I have to override the Render method in the
>UserControl.
>
> I do not really understand the HtmlTextWriter. How do I write
> populated
> TextBox controls to the webform?
>
> Thank you for any available help.
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Joe" wrote:
>
>> Hello All:
>>
>> Do I have to use the LoadControl method of the Page to load a
>> UserControl?
>>
>> I have a class which contains three methods (one public and two
>> private).
>> The class acts as a control server. It "serves" back the required
>> control
>> (either WebControl or UserControl) based on the contents of an xml
>> file.
>> The
>> code in the webform places each control in a TableCell.
>>
>> My problem is that the control server works as far as returning the
>> correct
>> control; but when I view the webform, the UserControl is nowhere to be
>> found.
>> It's not on the page and not in the View Source.
>>
>> Here is the server code (I'm not posting GetWebControl here):
>>
>> Public Function GetControl(ByVal NodeToRender As XmlNode) As
>> Web.UI.Control
>> Dim ValueToMatch As String
>> If NodeToRender.Name.Equals("DisplayText") Then
>> ValueToMatch = NodeToRender.Name.ToLower
>> Else
>> ValueToMatch =
>> NodeToRender.Attributes("type").Value.ToLower
>> End If
>> Select Case ValueToMatch.ToLower
>> Case "label", "textbox", "checkbox", "displaytext"
>> Return GetWebControl(NodeToRender)
>>
>> Case "customaddresses"
>> Return GetUserControl(NodeToRender)
>>
>> End Select
>> End Function
>>
>> Private Function GetUserControl(ByVal NodeToRender As XmlNode) As
>> Web.UI.UserControl
>> Dim uControl As New CustomAddresses
>>
>> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> Return uControl
>> End Function
>>
>> Here is the code and HTML for the UserControl (called
>> CustomAddresses):
>>
>> Public Class CustomAddresses
>> Inherits System.Web.UI.UserControl
>>
>> Public Sub New()
>> Addr1 = New TextBox
>> Addr2 = New TextBox
>> Addr3 = New TextBox
>> Addr4 = New TextBox
>> End Sub
>>
>> Public Sub PopulateAddressBoxes(ByVal str As String)
>> Dim SelectedValue() As String = str.Split(("/").ToCharArray())
>> Dim Name As String = SelectedValue(0).Trim
>> Dim Address() As String =
>> SelectedValue(1).Split((",").ToCharArray())
>> Dim Addr1 As String = Address(0).Trim
>> Dim Addr2 As String = Address(1).Trim
>> Dim City As String = Address(Address.Length - 3).Trim
>> Dim StateProvCd As String = Address(Address.Length - 2).Trim
>> Dim PostalCode As String = Address(Address.Length - 1).Trim
>>
>> Me.Addr1.Text = Name
>> Me.Addr2.Text = Addr1
>> If Not Addr2.Equals(City) Then
>> Me.Addr3.Text = Addr2
>> Me.Addr4.Text = City & " " & StateProvCd & ", " &
>> PostalCode
>> Else
>> Me.Addr3.Text = City & " " & StateProvCd & ", " &
>> PostalCode
>> End If
>> End Sub
>> End Class
>>
>> <%@ Control Language="vb" AutoEventWireup="false"
>> Codebehind="CustomAddresses.ascx.vb"
>> Inherits="WBMI.Claims.CustomAddresses"
>> TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
>> <TABLE class="interior" id="Table1" width="100%">
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr1" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr2" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr3" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr4" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> </TABLE>
>>
>> Here's a sample of the webform code that calls these:
>>
>> If TypeOf
>> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> Is
>> WebControl Then
>> ControlToRender =
>> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> WebControl)
>>
>> ElseIf TypeOf
>> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
>> UserControl Then
>> ControlToRender =
>> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> UserControl)
>>
>> End If
>> NewCell.Controls.Add(ControlToRender)
>>
>> What this boils down to is that I want to create and utilize a
>> ControlServer
>> class to encapsulate the details about how a control is created and
>> returned.
>>
>> Can this be done?
>>
>> TIA,
>> --
>> Joe
>>
>> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation


Dec 22 '05 #5
Joe
Hi Marina,

How would you use LoadControl from within the class that serves the
WebControls/UserControls? LoadControl must be called from a class that
inherits from the emplateControl class (i.e. Page and UserControl).

The whole point is to maximize flexibility by encapsulating the generation
of these controls, so that a webform (or another class) can simply request
the control that corresponds to an entry in the xml document.

If you know of another way to do this, please let me know. I would
appreciate any direction that you could provide.

Thanks,
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
I don't think this explains why you are against using LoadControl.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:14**********************************@microsof t.com...
Hi Peter,

We are using an xml document to "drive" the creation of web pages. The
document defines what controls to include on a webform and where where the
controls will appear.

I have alot of lead-way in defining how the document will be structured
and
used.

My idea was to have a class to encapsulate the generation of the required
control (be it a WebControl or a UserControl) and returns it to the
webform.
In this app, a UserControl is just a grouping of WebControls. For
example,
one UserControl (CustomAddresses) is four textbox server controls grouped
together for name, address1, address2 and city-state-zip. This will be
used
on the page when it will display a person's addresses.

Does this help you understand hat I am really trying to do?
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Peter Rilling" wrote:
Can you clarify more why you don't want to call LoadControl to load the
control. The reason LoadControl exists is so that ASP.NET has the
ability
to prepare the object has it expects such as loading the ASCX and
creating
an object model. If you create one with a constructor, then you prevent
the
engine from doing what it was suppose to.

All controls have the Render method, but you should not override that in
a
usercontrol. There are such things as custom web controls which inherit
from WebControl which you can then override the Render method.

All the HtmlTextWriter does is allow you to output the HTML. A textbox
is
nothing more than <input type="text" value="something"/>.
"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:0F**********************************@microsof t.com...
>I figured out that I have to override the Render method in the
>UserControl.
>
> I do not really understand the HtmlTextWriter. How do I write
> populated
> TextBox controls to the webform?
>
> Thank you for any available help.
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Joe" wrote:
>
>> Hello All:
>>
>> Do I have to use the LoadControl method of the Page to load a
>> UserControl?
>>
>> I have a class which contains three methods (one public and two
>> private).
>> The class acts as a control server. It "serves" back the required
>> control
>> (either WebControl or UserControl) based on the contents of an xml
>> file.
>> The
>> code in the webform places each control in a TableCell.
>>
>> My problem is that the control server works as far as returning the
>> correct
>> control; but when I view the webform, the UserControl is nowhere to be
>> found.
>> It's not on the page and not in the View Source.
>>
>> Here is the server code (I'm not posting GetWebControl here):
>>
>> Public Function GetControl(ByVal NodeToRender As XmlNode) As
>> Web.UI.Control
>> Dim ValueToMatch As String
>> If NodeToRender.Name.Equals("DisplayText") Then
>> ValueToMatch = NodeToRender.Name.ToLower
>> Else
>> ValueToMatch =
>> NodeToRender.Attributes("type").Value.ToLower
>> End If
>> Select Case ValueToMatch.ToLower
>> Case "label", "textbox", "checkbox", "displaytext"
>> Return GetWebControl(NodeToRender)
>>
>> Case "customaddresses"
>> Return GetUserControl(NodeToRender)
>>
>> End Select
>> End Function
>>
>> Private Function GetUserControl(ByVal NodeToRender As XmlNode) As
>> Web.UI.UserControl
>> Dim uControl As New CustomAddresses
>>
>> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> Return uControl
>> End Function
>>
>> Here is the code and HTML for the UserControl (called
>> CustomAddresses):
>>
>> Public Class CustomAddresses
>> Inherits System.Web.UI.UserControl
>>
>> Public Sub New()
>> Addr1 = New TextBox
>> Addr2 = New TextBox
>> Addr3 = New TextBox
>> Addr4 = New TextBox
>> End Sub
>>
>> Public Sub PopulateAddressBoxes(ByVal str As String)
>> Dim SelectedValue() As String = str.Split(("/").ToCharArray())
>> Dim Name As String = SelectedValue(0).Trim
>> Dim Address() As String =
>> SelectedValue(1).Split((",").ToCharArray())
>> Dim Addr1 As String = Address(0).Trim
>> Dim Addr2 As String = Address(1).Trim
>> Dim City As String = Address(Address.Length - 3).Trim
>> Dim StateProvCd As String = Address(Address.Length - 2).Trim
>> Dim PostalCode As String = Address(Address.Length - 1).Trim
>>
>> Me.Addr1.Text = Name
>> Me.Addr2.Text = Addr1
>> If Not Addr2.Equals(City) Then
>> Me.Addr3.Text = Addr2
>> Me.Addr4.Text = City & " " & StateProvCd & ", " &
>> PostalCode
>> Else
>> Me.Addr3.Text = City & " " & StateProvCd & ", " &
>> PostalCode
>> End If
>> End Sub
>> End Class
>>
>> <%@ Control Language="vb" AutoEventWireup="false"
>> Codebehind="CustomAddresses.ascx.vb"
>> Inherits="WBMI.Claims.CustomAddresses"
>> TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
>> <TABLE class="interior" id="Table1" width="100%">
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr1" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr2" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr3" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> <TR>
>> <TD class="tabledata">
>> <asp:TextBox id="Addr4" runat="server" Width="361px" ReadOnly="False"
>> MaxLength="60"></asp:TextBox></TD>
>> </TR>
>> </TABLE>
>>
>> Here's a sample of the webform code that calls these:
>>
>> If TypeOf
>> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> Is
>> WebControl Then
>> ControlToRender =
>> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> WebControl)
>>
>> ElseIf TypeOf
>> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
>> UserControl Then
>> ControlToRender =
>> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> UserControl)
>>
>> End If
>> NewCell.Controls.Add(ControlToRender)
>>
>> What this boils down to is that I want to create and utilize a
>> ControlServer
>> class to encapsulate the details about how a control is created and
>> returned.
>>
>> Can this be done?
>>
>> TIA,
>> --
>> Joe
>>
>> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation


Dec 22 '05 #6
If this is a usercontrol, nothing but another usercontrol or page can
possible do anything with it. It is a visual asp.net user control - windows
forms, etc. are not going to be able to do anything with it. Only the
ASP.NET engine can process it - which is why LoadControl was created, to do
just that. Because a constructor cannot do anything to help with rendering
it and instantiating it, and looking at the .ascx, etc etc.

So, even if you did manage to encapsulate it, only a page or usercontrol
would be able to use it anyway - so why bother?

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:A2**********************************@microsof t.com...
Hi Marina,

How would you use LoadControl from within the class that serves the
WebControls/UserControls? LoadControl must be called from a class that
inherits from the emplateControl class (i.e. Page and UserControl).

The whole point is to maximize flexibility by encapsulating the generation
of these controls, so that a webform (or another class) can simply request
the control that corresponds to an entry in the xml document.

If you know of another way to do this, please let me know. I would
appreciate any direction that you could provide.

Thanks,
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
I don't think this explains why you are against using LoadControl.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:14**********************************@microsof t.com...
> Hi Peter,
>
> We are using an xml document to "drive" the creation of web pages. The
> document defines what controls to include on a webform and where where
> the
> controls will appear.
>
> I have alot of lead-way in defining how the document will be structured
> and
> used.
>
> My idea was to have a class to encapsulate the generation of the
> required
> control (be it a WebControl or a UserControl) and returns it to the
> webform.
> In this app, a UserControl is just a grouping of WebControls. For
> example,
> one UserControl (CustomAddresses) is four textbox server controls
> grouped
> together for name, address1, address2 and city-state-zip. This will be
> used
> on the page when it will display a person's addresses.
>
> Does this help you understand hat I am really trying to do?
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Peter Rilling" wrote:
>
>> Can you clarify more why you don't want to call LoadControl to load
>> the
>> control. The reason LoadControl exists is so that ASP.NET has the
>> ability
>> to prepare the object has it expects such as loading the ASCX and
>> creating
>> an object model. If you create one with a constructor, then you
>> prevent
>> the
>> engine from doing what it was suppose to.
>>
>> All controls have the Render method, but you should not override that
>> in
>> a
>> usercontrol. There are such things as custom web controls which
>> inherit
>> from WebControl which you can then override the Render method.
>>
>> All the HtmlTextWriter does is allow you to output the HTML. A
>> textbox
>> is
>> nothing more than <input type="text" value="something"/>.
>>
>>
>> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> news:0F**********************************@microsof t.com...
>> >I figured out that I have to override the Render method in the
>> >UserControl.
>> >
>> > I do not really understand the HtmlTextWriter. How do I write
>> > populated
>> > TextBox controls to the webform?
>> >
>> > Thank you for any available help.
>> > --
>> > Joe
>> >
>> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>> >
>> >
>> > "Joe" wrote:
>> >
>> >> Hello All:
>> >>
>> >> Do I have to use the LoadControl method of the Page to load a
>> >> UserControl?
>> >>
>> >> I have a class which contains three methods (one public and two
>> >> private).
>> >> The class acts as a control server. It "serves" back the required
>> >> control
>> >> (either WebControl or UserControl) based on the contents of an xml
>> >> file.
>> >> The
>> >> code in the webform places each control in a TableCell.
>> >>
>> >> My problem is that the control server works as far as returning the
>> >> correct
>> >> control; but when I view the webform, the UserControl is nowhere to
>> >> be
>> >> found.
>> >> It's not on the page and not in the View Source.
>> >>
>> >> Here is the server code (I'm not posting GetWebControl here):
>> >>
>> >> Public Function GetControl(ByVal NodeToRender As XmlNode) As
>> >> Web.UI.Control
>> >> Dim ValueToMatch As String
>> >> If NodeToRender.Name.Equals("DisplayText") Then
>> >> ValueToMatch = NodeToRender.Name.ToLower
>> >> Else
>> >> ValueToMatch =
>> >> NodeToRender.Attributes("type").Value.ToLower
>> >> End If
>> >> Select Case ValueToMatch.ToLower
>> >> Case "label", "textbox", "checkbox", "displaytext"
>> >> Return GetWebControl(NodeToRender)
>> >>
>> >> Case "customaddresses"
>> >> Return GetUserControl(NodeToRender)
>> >>
>> >> End Select
>> >> End Function
>> >>
>> >> Private Function GetUserControl(ByVal NodeToRender As XmlNode)
>> >> As
>> >> Web.UI.UserControl
>> >> Dim uControl As New CustomAddresses
>> >>
>> >> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> >> Return uControl
>> >> End Function
>> >>
>> >> Here is the code and HTML for the UserControl (called
>> >> CustomAddresses):
>> >>
>> >> Public Class CustomAddresses
>> >> Inherits System.Web.UI.UserControl
>> >>
>> >> Public Sub New()
>> >> Addr1 = New TextBox
>> >> Addr2 = New TextBox
>> >> Addr3 = New TextBox
>> >> Addr4 = New TextBox
>> >> End Sub
>> >>
>> >> Public Sub PopulateAddressBoxes(ByVal str As String)
>> >> Dim SelectedValue() As String =
>> >> str.Split(("/").ToCharArray())
>> >> Dim Name As String = SelectedValue(0).Trim
>> >> Dim Address() As String =
>> >> SelectedValue(1).Split((",").ToCharArray())
>> >> Dim Addr1 As String = Address(0).Trim
>> >> Dim Addr2 As String = Address(1).Trim
>> >> Dim City As String = Address(Address.Length - 3).Trim
>> >> Dim StateProvCd As String = Address(Address.Length -
>> >> 2).Trim
>> >> Dim PostalCode As String = Address(Address.Length - 1).Trim
>> >>
>> >> Me.Addr1.Text = Name
>> >> Me.Addr2.Text = Addr1
>> >> If Not Addr2.Equals(City) Then
>> >> Me.Addr3.Text = Addr2
>> >> Me.Addr4.Text = City & " " & StateProvCd & ", " &
>> >> PostalCode
>> >> Else
>> >> Me.Addr3.Text = City & " " & StateProvCd & ", " &
>> >> PostalCode
>> >> End If
>> >> End Sub
>> >> End Class
>> >>
>> >> <%@ Control Language="vb" AutoEventWireup="false"
>> >> Codebehind="CustomAddresses.ascx.vb"
>> >> Inherits="WBMI.Claims.CustomAddresses"
>> >> TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
>> >> <TABLE class="interior" id="Table1" width="100%">
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr1" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr2" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr3" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr4" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> </TABLE>
>> >>
>> >> Here's a sample of the webform code that calls these:
>> >>
>> >> If TypeOf
>> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> >> Is
>> >> WebControl Then
>> >> ControlToRender =
>> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> WebControl)
>> >>
>> >> ElseIf TypeOf
>> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
>> >> UserControl Then
>> >> ControlToRender =
>> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> UserControl)
>> >>
>> >> End If
>> >> NewCell.Controls.Add(ControlToRender)
>> >>
>> >> What this boils down to is that I want to create and utilize a
>> >> ControlServer
>> >> class to encapsulate the details about how a control is created and
>> >> returned.
>> >>
>> >> Can this be done?
>> >>
>> >> TIA,
>> >> --
>> >> Joe
>> >>
>> >> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>>
>>
>>


Dec 22 '05 #7
Joe
Hi Marina,

Only a Page is going to use it.

The point is to encapsulate the process of creating it. To have one class
that accepts information (in this case, an XmlNode that has data that the
class uses to return the appropriate control) and returns a control - be it a
WebControl or a UserControl. I've encapsulated the process of returning
WebControls that are then placed in the appropriate places on the Page; now I
want to encapsulate the process of returning UserControls.

Why? Because we want a central unit to handle this functionality.

Any ideas?
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
If this is a usercontrol, nothing but another usercontrol or page can
possible do anything with it. It is a visual asp.net user control - windows
forms, etc. are not going to be able to do anything with it. Only the
ASP.NET engine can process it - which is why LoadControl was created, to do
just that. Because a constructor cannot do anything to help with rendering
it and instantiating it, and looking at the .ascx, etc etc.

So, even if you did manage to encapsulate it, only a page or usercontrol
would be able to use it anyway - so why bother?

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:A2**********************************@microsof t.com...
Hi Marina,

How would you use LoadControl from within the class that serves the
WebControls/UserControls? LoadControl must be called from a class that
inherits from the emplateControl class (i.e. Page and UserControl).

The whole point is to maximize flexibility by encapsulating the generation
of these controls, so that a webform (or another class) can simply request
the control that corresponds to an entry in the xml document.

If you know of another way to do this, please let me know. I would
appreciate any direction that you could provide.

Thanks,
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
I don't think this explains why you are against using LoadControl.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:14**********************************@microsof t.com...
> Hi Peter,
>
> We are using an xml document to "drive" the creation of web pages. The
> document defines what controls to include on a webform and where where
> the
> controls will appear.
>
> I have alot of lead-way in defining how the document will be structured
> and
> used.
>
> My idea was to have a class to encapsulate the generation of the
> required
> control (be it a WebControl or a UserControl) and returns it to the
> webform.
> In this app, a UserControl is just a grouping of WebControls. For
> example,
> one UserControl (CustomAddresses) is four textbox server controls
> grouped
> together for name, address1, address2 and city-state-zip. This will be
> used
> on the page when it will display a person's addresses.
>
> Does this help you understand hat I am really trying to do?
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Peter Rilling" wrote:
>
>> Can you clarify more why you don't want to call LoadControl to load
>> the
>> control. The reason LoadControl exists is so that ASP.NET has the
>> ability
>> to prepare the object has it expects such as loading the ASCX and
>> creating
>> an object model. If you create one with a constructor, then you
>> prevent
>> the
>> engine from doing what it was suppose to.
>>
>> All controls have the Render method, but you should not override that
>> in
>> a
>> usercontrol. There are such things as custom web controls which
>> inherit
>> from WebControl which you can then override the Render method.
>>
>> All the HtmlTextWriter does is allow you to output the HTML. A
>> textbox
>> is
>> nothing more than <input type="text" value="something"/>.
>>
>>
>> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> news:0F**********************************@microsof t.com...
>> >I figured out that I have to override the Render method in the
>> >UserControl.
>> >
>> > I do not really understand the HtmlTextWriter. How do I write
>> > populated
>> > TextBox controls to the webform?
>> >
>> > Thank you for any available help.
>> > --
>> > Joe
>> >
>> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>> >
>> >
>> > "Joe" wrote:
>> >
>> >> Hello All:
>> >>
>> >> Do I have to use the LoadControl method of the Page to load a
>> >> UserControl?
>> >>
>> >> I have a class which contains three methods (one public and two
>> >> private).
>> >> The class acts as a control server. It "serves" back the required
>> >> control
>> >> (either WebControl or UserControl) based on the contents of an xml
>> >> file.
>> >> The
>> >> code in the webform places each control in a TableCell.
>> >>
>> >> My problem is that the control server works as far as returning the
>> >> correct
>> >> control; but when I view the webform, the UserControl is nowhere to
>> >> be
>> >> found.
>> >> It's not on the page and not in the View Source.
>> >>
>> >> Here is the server code (I'm not posting GetWebControl here):
>> >>
>> >> Public Function GetControl(ByVal NodeToRender As XmlNode) As
>> >> Web.UI.Control
>> >> Dim ValueToMatch As String
>> >> If NodeToRender.Name.Equals("DisplayText") Then
>> >> ValueToMatch = NodeToRender.Name.ToLower
>> >> Else
>> >> ValueToMatch =
>> >> NodeToRender.Attributes("type").Value.ToLower
>> >> End If
>> >> Select Case ValueToMatch.ToLower
>> >> Case "label", "textbox", "checkbox", "displaytext"
>> >> Return GetWebControl(NodeToRender)
>> >>
>> >> Case "customaddresses"
>> >> Return GetUserControl(NodeToRender)
>> >>
>> >> End Select
>> >> End Function
>> >>
>> >> Private Function GetUserControl(ByVal NodeToRender As XmlNode)
>> >> As
>> >> Web.UI.UserControl
>> >> Dim uControl As New CustomAddresses
>> >>
>> >> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> >> Return uControl
>> >> End Function
>> >>
>> >> Here is the code and HTML for the UserControl (called
>> >> CustomAddresses):
>> >>
>> >> Public Class CustomAddresses
>> >> Inherits System.Web.UI.UserControl
>> >>
>> >> Public Sub New()
>> >> Addr1 = New TextBox
>> >> Addr2 = New TextBox
>> >> Addr3 = New TextBox
>> >> Addr4 = New TextBox
>> >> End Sub
>> >>
>> >> Public Sub PopulateAddressBoxes(ByVal str As String)
>> >> Dim SelectedValue() As String =
>> >> str.Split(("/").ToCharArray())
>> >> Dim Name As String = SelectedValue(0).Trim
>> >> Dim Address() As String =
>> >> SelectedValue(1).Split((",").ToCharArray())
>> >> Dim Addr1 As String = Address(0).Trim
>> >> Dim Addr2 As String = Address(1).Trim
>> >> Dim City As String = Address(Address.Length - 3).Trim
>> >> Dim StateProvCd As String = Address(Address.Length -
>> >> 2).Trim
>> >> Dim PostalCode As String = Address(Address.Length - 1).Trim
>> >>
>> >> Me.Addr1.Text = Name
>> >> Me.Addr2.Text = Addr1
>> >> If Not Addr2.Equals(City) Then
>> >> Me.Addr3.Text = Addr2
>> >> Me.Addr4.Text = City & " " & StateProvCd & ", " &
>> >> PostalCode
>> >> Else
>> >> Me.Addr3.Text = City & " " & StateProvCd & ", " &
>> >> PostalCode
>> >> End If
>> >> End Sub
>> >> End Class
>> >>
>> >> <%@ Control Language="vb" AutoEventWireup="false"
>> >> Codebehind="CustomAddresses.ascx.vb"
>> >> Inherits="WBMI.Claims.CustomAddresses"
>> >> TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
>> >> <TABLE class="interior" id="Table1" width="100%">
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr1" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr2" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr3" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> <TR>
>> >> <TD class="tabledata">
>> >> <asp:TextBox id="Addr4" runat="server" Width="361px"
>> >> ReadOnly="False"
>> >> MaxLength="60"></asp:TextBox></TD>
>> >> </TR>
>> >> </TABLE>
>> >>
>> >> Here's a sample of the webform code that calls these:
>> >>
>> >> If TypeOf
>> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> >> Is
>> >> WebControl Then
>> >> ControlToRender =
>> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> WebControl)
>> >>
>> >> ElseIf TypeOf
>> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode)) Is
>> >> UserControl Then
>> >> ControlToRender =
>> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> UserControl)
>> >>
>> >> End If
>> >> NewCell.Controls.Add(ControlToRender)
>> >>
>> >> What this boils down to is that I want to create and utilize a
>> >> ControlServer
>> >> class to encapsulate the details about how a control is created and
>> >> returned.
>> >>
>> >> Can this be done?
>> >>
>> >> TIA,
>> >> --
>> >> Joe
>> >>
>> >> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>>
>>
>>


Dec 22 '05 #8
That's fine. But why can't this unit use LoadControl? That is really the
question.

There are many way to accomplish this central place having access to
whatever page wants the user control created, so it can use the page's
LoadControl.

I think you are getting stuck in trying to box everything up, and not really
thinking about the functionality here. Only a Page can host a user control.
Only ASP.NET's engine can parse the .ascx, turn it into an object, use the
class behind it to render it all. So, whatever black box is going to have
this functionality, is going to need to have access to a Page on way or
another. It could be through inheritance, it could be through passing the
Page instance up, etc.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:73**********************************@microsof t.com...
Hi Marina,

Only a Page is going to use it.

The point is to encapsulate the process of creating it. To have one class
that accepts information (in this case, an XmlNode that has data that the
class uses to return the appropriate control) and returns a control - be
it a
WebControl or a UserControl. I've encapsulated the process of returning
WebControls that are then placed in the appropriate places on the Page;
now I
want to encapsulate the process of returning UserControls.

Why? Because we want a central unit to handle this functionality.

Any ideas?
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
If this is a usercontrol, nothing but another usercontrol or page can
possible do anything with it. It is a visual asp.net user control -
windows
forms, etc. are not going to be able to do anything with it. Only the
ASP.NET engine can process it - which is why LoadControl was created, to
do
just that. Because a constructor cannot do anything to help with
rendering
it and instantiating it, and looking at the .ascx, etc etc.

So, even if you did manage to encapsulate it, only a page or usercontrol
would be able to use it anyway - so why bother?

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:A2**********************************@microsof t.com...
> Hi Marina,
>
> How would you use LoadControl from within the class that serves the
> WebControls/UserControls? LoadControl must be called from a class that
> inherits from the emplateControl class (i.e. Page and UserControl).
>
> The whole point is to maximize flexibility by encapsulating the
> generation
> of these controls, so that a webform (or another class) can simply
> request
> the control that corresponds to an entry in the xml document.
>
> If you know of another way to do this, please let me know. I would
> appreciate any direction that you could provide.
>
> Thanks,
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Marina" wrote:
>
>> I don't think this explains why you are against using LoadControl.
>>
>> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> news:14**********************************@microsof t.com...
>> > Hi Peter,
>> >
>> > We are using an xml document to "drive" the creation of web pages.
>> > The
>> > document defines what controls to include on a webform and where
>> > where
>> > the
>> > controls will appear.
>> >
>> > I have alot of lead-way in defining how the document will be
>> > structured
>> > and
>> > used.
>> >
>> > My idea was to have a class to encapsulate the generation of the
>> > required
>> > control (be it a WebControl or a UserControl) and returns it to the
>> > webform.
>> > In this app, a UserControl is just a grouping of WebControls. For
>> > example,
>> > one UserControl (CustomAddresses) is four textbox server controls
>> > grouped
>> > together for name, address1, address2 and city-state-zip. This will
>> > be
>> > used
>> > on the page when it will display a person's addresses.
>> >
>> > Does this help you understand hat I am really trying to do?
>> > --
>> > Joe
>> >
>> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>> >
>> >
>> > "Peter Rilling" wrote:
>> >
>> >> Can you clarify more why you don't want to call LoadControl to load
>> >> the
>> >> control. The reason LoadControl exists is so that ASP.NET has the
>> >> ability
>> >> to prepare the object has it expects such as loading the ASCX and
>> >> creating
>> >> an object model. If you create one with a constructor, then you
>> >> prevent
>> >> the
>> >> engine from doing what it was suppose to.
>> >>
>> >> All controls have the Render method, but you should not override
>> >> that
>> >> in
>> >> a
>> >> usercontrol. There are such things as custom web controls which
>> >> inherit
>> >> from WebControl which you can then override the Render method.
>> >>
>> >> All the HtmlTextWriter does is allow you to output the HTML. A
>> >> textbox
>> >> is
>> >> nothing more than <input type="text" value="something"/>.
>> >>
>> >>
>> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> news:0F**********************************@microsof t.com...
>> >> >I figured out that I have to override the Render method in the
>> >> >UserControl.
>> >> >
>> >> > I do not really understand the HtmlTextWriter. How do I write
>> >> > populated
>> >> > TextBox controls to the webform?
>> >> >
>> >> > Thank you for any available help.
>> >> > --
>> >> > Joe
>> >> >
>> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> > Automation
>> >> >
>> >> >
>> >> > "Joe" wrote:
>> >> >
>> >> >> Hello All:
>> >> >>
>> >> >> Do I have to use the LoadControl method of the Page to load a
>> >> >> UserControl?
>> >> >>
>> >> >> I have a class which contains three methods (one public and two
>> >> >> private).
>> >> >> The class acts as a control server. It "serves" back the
>> >> >> required
>> >> >> control
>> >> >> (either WebControl or UserControl) based on the contents of an
>> >> >> xml
>> >> >> file.
>> >> >> The
>> >> >> code in the webform places each control in a TableCell.
>> >> >>
>> >> >> My problem is that the control server works as far as returning
>> >> >> the
>> >> >> correct
>> >> >> control; but when I view the webform, the UserControl is nowhere
>> >> >> to
>> >> >> be
>> >> >> found.
>> >> >> It's not on the page and not in the View Source.
>> >> >>
>> >> >> Here is the server code (I'm not posting GetWebControl here):
>> >> >>
>> >> >> Public Function GetControl(ByVal NodeToRender As XmlNode) As
>> >> >> Web.UI.Control
>> >> >> Dim ValueToMatch As String
>> >> >> If NodeToRender.Name.Equals("DisplayText") Then
>> >> >> ValueToMatch = NodeToRender.Name.ToLower
>> >> >> Else
>> >> >> ValueToMatch =
>> >> >> NodeToRender.Attributes("type").Value.ToLower
>> >> >> End If
>> >> >> Select Case ValueToMatch.ToLower
>> >> >> Case "label", "textbox", "checkbox", "displaytext"
>> >> >> Return GetWebControl(NodeToRender)
>> >> >>
>> >> >> Case "customaddresses"
>> >> >> Return GetUserControl(NodeToRender)
>> >> >>
>> >> >> End Select
>> >> >> End Function
>> >> >>
>> >> >> Private Function GetUserControl(ByVal NodeToRender As
>> >> >> XmlNode)
>> >> >> As
>> >> >> Web.UI.UserControl
>> >> >> Dim uControl As New CustomAddresses
>> >> >>
>> >> >> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> >> >> Return uControl
>> >> >> End Function
>> >> >>
>> >> >> Here is the code and HTML for the UserControl (called
>> >> >> CustomAddresses):
>> >> >>
>> >> >> Public Class CustomAddresses
>> >> >> Inherits System.Web.UI.UserControl
>> >> >>
>> >> >> Public Sub New()
>> >> >> Addr1 = New TextBox
>> >> >> Addr2 = New TextBox
>> >> >> Addr3 = New TextBox
>> >> >> Addr4 = New TextBox
>> >> >> End Sub
>> >> >>
>> >> >> Public Sub PopulateAddressBoxes(ByVal str As String)
>> >> >> Dim SelectedValue() As String =
>> >> >> str.Split(("/").ToCharArray())
>> >> >> Dim Name As String = SelectedValue(0).Trim
>> >> >> Dim Address() As String =
>> >> >> SelectedValue(1).Split((",").ToCharArray())
>> >> >> Dim Addr1 As String = Address(0).Trim
>> >> >> Dim Addr2 As String = Address(1).Trim
>> >> >> Dim City As String = Address(Address.Length - 3).Trim
>> >> >> Dim StateProvCd As String = Address(Address.Length -
>> >> >> 2).Trim
>> >> >> Dim PostalCode As String = Address(Address.Length -
>> >> >> 1).Trim
>> >> >>
>> >> >> Me.Addr1.Text = Name
>> >> >> Me.Addr2.Text = Addr1
>> >> >> If Not Addr2.Equals(City) Then
>> >> >> Me.Addr3.Text = Addr2
>> >> >> Me.Addr4.Text = City & " " & StateProvCd & ", " &
>> >> >> PostalCode
>> >> >> Else
>> >> >> Me.Addr3.Text = City & " " & StateProvCd & ", " &
>> >> >> PostalCode
>> >> >> End If
>> >> >> End Sub
>> >> >> End Class
>> >> >>
>> >> >> <%@ Control Language="vb" AutoEventWireup="false"
>> >> >> Codebehind="CustomAddresses.ascx.vb"
>> >> >> Inherits="WBMI.Claims.CustomAddresses"
>> >> >> TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
>> >> >> <TABLE class="interior" id="Table1" width="100%">
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr1" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr2" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr3" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr4" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> </TABLE>
>> >> >>
>> >> >> Here's a sample of the webform code that calls these:
>> >> >>
>> >> >> If TypeOf
>> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> >> >> Is
>> >> >> WebControl Then
>> >> >> ControlToRender =
>> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> >> WebControl)
>> >> >>
>> >> >> ElseIf TypeOf
>> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> >> >> Is
>> >> >> UserControl Then
>> >> >> ControlToRender =
>> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> >> UserControl)
>> >> >>
>> >> >> End If
>> >> >> NewCell.Controls.Add(ControlToRender)
>> >> >>
>> >> >> What this boils down to is that I want to create and utilize a
>> >> >> ControlServer
>> >> >> class to encapsulate the details about how a control is created
>> >> >> and
>> >> >> returned.
>> >> >>
>> >> >> Can this be done?
>> >> >>
>> >> >> TIA,
>> >> >> --
>> >> >> Joe
>> >> >>
>> >> >> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> >> Automation
>> >>
>> >>
>> >>
>>
>>
>>


Dec 22 '05 #9
Joe
It can use LoadControl; in fact, I want to use LoadControl because I don't
want to bother overriding the Render method of the UserControl. The problem
is that I didn't have access to LoadControl from within my class (let's call
it ControlServer). So I instantiate and call ControlServer class from within
the Page (I am doing this now).

How would you pass a Page Instance up? Like so?

Dim sC as New ControlServer
sC.SomeMethod(Me, another_data_value)

--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
That's fine. But why can't this unit use LoadControl? That is really the
question.

There are many way to accomplish this central place having access to
whatever page wants the user control created, so it can use the page's
LoadControl.

I think you are getting stuck in trying to box everything up, and not really
thinking about the functionality here. Only a Page can host a user control.
Only ASP.NET's engine can parse the .ascx, turn it into an object, use the
class behind it to render it all. So, whatever black box is going to have
this functionality, is going to need to have access to a Page on way or
another. It could be through inheritance, it could be through passing the
Page instance up, etc.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:73**********************************@microsof t.com...
Hi Marina,

Only a Page is going to use it.

The point is to encapsulate the process of creating it. To have one class
that accepts information (in this case, an XmlNode that has data that the
class uses to return the appropriate control) and returns a control - be
it a
WebControl or a UserControl. I've encapsulated the process of returning
WebControls that are then placed in the appropriate places on the Page;
now I
want to encapsulate the process of returning UserControls.

Why? Because we want a central unit to handle this functionality.

Any ideas?
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
If this is a usercontrol, nothing but another usercontrol or page can
possible do anything with it. It is a visual asp.net user control -
windows
forms, etc. are not going to be able to do anything with it. Only the
ASP.NET engine can process it - which is why LoadControl was created, to
do
just that. Because a constructor cannot do anything to help with
rendering
it and instantiating it, and looking at the .ascx, etc etc.

So, even if you did manage to encapsulate it, only a page or usercontrol
would be able to use it anyway - so why bother?

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:A2**********************************@microsof t.com...
> Hi Marina,
>
> How would you use LoadControl from within the class that serves the
> WebControls/UserControls? LoadControl must be called from a class that
> inherits from the emplateControl class (i.e. Page and UserControl).
>
> The whole point is to maximize flexibility by encapsulating the
> generation
> of these controls, so that a webform (or another class) can simply
> request
> the control that corresponds to an entry in the xml document.
>
> If you know of another way to do this, please let me know. I would
> appreciate any direction that you could provide.
>
> Thanks,
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Marina" wrote:
>
>> I don't think this explains why you are against using LoadControl.
>>
>> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> news:14**********************************@microsof t.com...
>> > Hi Peter,
>> >
>> > We are using an xml document to "drive" the creation of web pages.
>> > The
>> > document defines what controls to include on a webform and where
>> > where
>> > the
>> > controls will appear.
>> >
>> > I have alot of lead-way in defining how the document will be
>> > structured
>> > and
>> > used.
>> >
>> > My idea was to have a class to encapsulate the generation of the
>> > required
>> > control (be it a WebControl or a UserControl) and returns it to the
>> > webform.
>> > In this app, a UserControl is just a grouping of WebControls. For
>> > example,
>> > one UserControl (CustomAddresses) is four textbox server controls
>> > grouped
>> > together for name, address1, address2 and city-state-zip. This will
>> > be
>> > used
>> > on the page when it will display a person's addresses.
>> >
>> > Does this help you understand hat I am really trying to do?
>> > --
>> > Joe
>> >
>> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>> >
>> >
>> > "Peter Rilling" wrote:
>> >
>> >> Can you clarify more why you don't want to call LoadControl to load
>> >> the
>> >> control. The reason LoadControl exists is so that ASP.NET has the
>> >> ability
>> >> to prepare the object has it expects such as loading the ASCX and
>> >> creating
>> >> an object model. If you create one with a constructor, then you
>> >> prevent
>> >> the
>> >> engine from doing what it was suppose to.
>> >>
>> >> All controls have the Render method, but you should not override
>> >> that
>> >> in
>> >> a
>> >> usercontrol. There are such things as custom web controls which
>> >> inherit
>> >> from WebControl which you can then override the Render method.
>> >>
>> >> All the HtmlTextWriter does is allow you to output the HTML. A
>> >> textbox
>> >> is
>> >> nothing more than <input type="text" value="something"/>.
>> >>
>> >>
>> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> news:0F**********************************@microsof t.com...
>> >> >I figured out that I have to override the Render method in the
>> >> >UserControl.
>> >> >
>> >> > I do not really understand the HtmlTextWriter. How do I write
>> >> > populated
>> >> > TextBox controls to the webform?
>> >> >
>> >> > Thank you for any available help.
>> >> > --
>> >> > Joe
>> >> >
>> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> > Automation
>> >> >
>> >> >
>> >> > "Joe" wrote:
>> >> >
>> >> >> Hello All:
>> >> >>
>> >> >> Do I have to use the LoadControl method of the Page to load a
>> >> >> UserControl?
>> >> >>
>> >> >> I have a class which contains three methods (one public and two
>> >> >> private).
>> >> >> The class acts as a control server. It "serves" back the
>> >> >> required
>> >> >> control
>> >> >> (either WebControl or UserControl) based on the contents of an
>> >> >> xml
>> >> >> file.
>> >> >> The
>> >> >> code in the webform places each control in a TableCell.
>> >> >>
>> >> >> My problem is that the control server works as far as returning
>> >> >> the
>> >> >> correct
>> >> >> control; but when I view the webform, the UserControl is nowhere
>> >> >> to
>> >> >> be
>> >> >> found.
>> >> >> It's not on the page and not in the View Source.
>> >> >>
>> >> >> Here is the server code (I'm not posting GetWebControl here):
>> >> >>
>> >> >> Public Function GetControl(ByVal NodeToRender As XmlNode) As
>> >> >> Web.UI.Control
>> >> >> Dim ValueToMatch As String
>> >> >> If NodeToRender.Name.Equals("DisplayText") Then
>> >> >> ValueToMatch = NodeToRender.Name.ToLower
>> >> >> Else
>> >> >> ValueToMatch =
>> >> >> NodeToRender.Attributes("type").Value.ToLower
>> >> >> End If
>> >> >> Select Case ValueToMatch.ToLower
>> >> >> Case "label", "textbox", "checkbox", "displaytext"
>> >> >> Return GetWebControl(NodeToRender)
>> >> >>
>> >> >> Case "customaddresses"
>> >> >> Return GetUserControl(NodeToRender)
>> >> >>
>> >> >> End Select
>> >> >> End Function
>> >> >>
>> >> >> Private Function GetUserControl(ByVal NodeToRender As
>> >> >> XmlNode)
>> >> >> As
>> >> >> Web.UI.UserControl
>> >> >> Dim uControl As New CustomAddresses
>> >> >>
>> >> >> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> >> >> Return uControl
>> >> >> End Function
>> >> >>
>> >> >> Here is the code and HTML for the UserControl (called
>> >> >> CustomAddresses):
>> >> >>
>> >> >> Public Class CustomAddresses
>> >> >> Inherits System.Web.UI.UserControl
>> >> >>
>> >> >> Public Sub New()
>> >> >> Addr1 = New TextBox
>> >> >> Addr2 = New TextBox
>> >> >> Addr3 = New TextBox
>> >> >> Addr4 = New TextBox
>> >> >> End Sub
>> >> >>
>> >> >> Public Sub PopulateAddressBoxes(ByVal str As String)
>> >> >> Dim SelectedValue() As String =
>> >> >> str.Split(("/").ToCharArray())
>> >> >> Dim Name As String = SelectedValue(0).Trim
>> >> >> Dim Address() As String =
>> >> >> SelectedValue(1).Split((",").ToCharArray())
>> >> >> Dim Addr1 As String = Address(0).Trim
>> >> >> Dim Addr2 As String = Address(1).Trim
>> >> >> Dim City As String = Address(Address.Length - 3).Trim
>> >> >> Dim StateProvCd As String = Address(Address.Length -
>> >> >> 2).Trim
>> >> >> Dim PostalCode As String = Address(Address.Length -
>> >> >> 1).Trim
>> >> >>
>> >> >> Me.Addr1.Text = Name
>> >> >> Me.Addr2.Text = Addr1
>> >> >> If Not Addr2.Equals(City) Then
>> >> >> Me.Addr3.Text = Addr2
>> >> >> Me.Addr4.Text = City & " " & StateProvCd & ", " &
>> >> >> PostalCode
>> >> >> Else
>> >> >> Me.Addr3.Text = City & " " & StateProvCd & ", " &
>> >> >> PostalCode
>> >> >> End If
>> >> >> End Sub
>> >> >> End Class
>> >> >>
>> >> >> <%@ Control Language="vb" AutoEventWireup="false"
>> >> >> Codebehind="CustomAddresses.ascx.vb"
>> >> >> Inherits="WBMI.Claims.CustomAddresses"
>> >> >> TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
>> >> >> <TABLE class="interior" id="Table1" width="100%">
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr1" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr2" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr3" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> <TR>
>> >> >> <TD class="tabledata">
>> >> >> <asp:TextBox id="Addr4" runat="server" Width="361px"
>> >> >> ReadOnly="False"
>> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> </TR>
>> >> >> </TABLE>
>> >> >>
>> >> >> Here's a sample of the webform code that calls these:
>> >> >>
>> >> >> If TypeOf
>> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> >> >> Is
>> >> >> WebControl Then
>> >> >> ControlToRender =
>> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> >> WebControl)

Dec 22 '05 #10
Your thread started out saying you didn't want to use LoadControl, which is
why I was addressing that issue.

Yes, your code would look something like what you have there.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:E0**********************************@microsof t.com...
It can use LoadControl; in fact, I want to use LoadControl because I don't
want to bother overriding the Render method of the UserControl. The
problem
is that I didn't have access to LoadControl from within my class (let's
call
it ControlServer). So I instantiate and call ControlServer class from
within
the Page (I am doing this now).

How would you pass a Page Instance up? Like so?

Dim sC as New ControlServer
sC.SomeMethod(Me, another_data_value)

--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
That's fine. But why can't this unit use LoadControl? That is really the
question.

There are many way to accomplish this central place having access to
whatever page wants the user control created, so it can use the page's
LoadControl.

I think you are getting stuck in trying to box everything up, and not
really
thinking about the functionality here. Only a Page can host a user
control.
Only ASP.NET's engine can parse the .ascx, turn it into an object, use
the
class behind it to render it all. So, whatever black box is going to have
this functionality, is going to need to have access to a Page on way or
another. It could be through inheritance, it could be through passing the
Page instance up, etc.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:73**********************************@microsof t.com...
> Hi Marina,
>
> Only a Page is going to use it.
>
> The point is to encapsulate the process of creating it. To have one
> class
> that accepts information (in this case, an XmlNode that has data that
> the
> class uses to return the appropriate control) and returns a control -
> be
> it a
> WebControl or a UserControl. I've encapsulated the process of
> returning
> WebControls that are then placed in the appropriate places on the Page;
> now I
> want to encapsulate the process of returning UserControls.
>
> Why? Because we want a central unit to handle this functionality.
>
> Any ideas?
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Marina" wrote:
>
>> If this is a usercontrol, nothing but another usercontrol or page can
>> possible do anything with it. It is a visual asp.net user control -
>> windows
>> forms, etc. are not going to be able to do anything with it. Only the
>> ASP.NET engine can process it - which is why LoadControl was created,
>> to
>> do
>> just that. Because a constructor cannot do anything to help with
>> rendering
>> it and instantiating it, and looking at the .ascx, etc etc.
>>
>> So, even if you did manage to encapsulate it, only a page or
>> usercontrol
>> would be able to use it anyway - so why bother?
>>
>> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> news:A2**********************************@microsof t.com...
>> > Hi Marina,
>> >
>> > How would you use LoadControl from within the class that serves the
>> > WebControls/UserControls? LoadControl must be called from a class
>> > that
>> > inherits from the emplateControl class (i.e. Page and UserControl).
>> >
>> > The whole point is to maximize flexibility by encapsulating the
>> > generation
>> > of these controls, so that a webform (or another class) can simply
>> > request
>> > the control that corresponds to an entry in the xml document.
>> >
>> > If you know of another way to do this, please let me know. I would
>> > appreciate any direction that you could provide.
>> >
>> > Thanks,
>> > --
>> > Joe
>> >
>> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>> >
>> >
>> > "Marina" wrote:
>> >
>> >> I don't think this explains why you are against using LoadControl.
>> >>
>> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> news:14**********************************@microsof t.com...
>> >> > Hi Peter,
>> >> >
>> >> > We are using an xml document to "drive" the creation of web
>> >> > pages.
>> >> > The
>> >> > document defines what controls to include on a webform and where
>> >> > where
>> >> > the
>> >> > controls will appear.
>> >> >
>> >> > I have alot of lead-way in defining how the document will be
>> >> > structured
>> >> > and
>> >> > used.
>> >> >
>> >> > My idea was to have a class to encapsulate the generation of the
>> >> > required
>> >> > control (be it a WebControl or a UserControl) and returns it to
>> >> > the
>> >> > webform.
>> >> > In this app, a UserControl is just a grouping of WebControls.
>> >> > For
>> >> > example,
>> >> > one UserControl (CustomAddresses) is four textbox server controls
>> >> > grouped
>> >> > together for name, address1, address2 and city-state-zip. This
>> >> > will
>> >> > be
>> >> > used
>> >> > on the page when it will display a person's addresses.
>> >> >
>> >> > Does this help you understand hat I am really trying to do?
>> >> > --
>> >> > Joe
>> >> >
>> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> > Automation
>> >> >
>> >> >
>> >> > "Peter Rilling" wrote:
>> >> >
>> >> >> Can you clarify more why you don't want to call LoadControl to
>> >> >> load
>> >> >> the
>> >> >> control. The reason LoadControl exists is so that ASP.NET has
>> >> >> the
>> >> >> ability
>> >> >> to prepare the object has it expects such as loading the ASCX
>> >> >> and
>> >> >> creating
>> >> >> an object model. If you create one with a constructor, then you
>> >> >> prevent
>> >> >> the
>> >> >> engine from doing what it was suppose to.
>> >> >>
>> >> >> All controls have the Render method, but you should not override
>> >> >> that
>> >> >> in
>> >> >> a
>> >> >> usercontrol. There are such things as custom web controls which
>> >> >> inherit
>> >> >> from WebControl which you can then override the Render method.
>> >> >>
>> >> >> All the HtmlTextWriter does is allow you to output the HTML. A
>> >> >> textbox
>> >> >> is
>> >> >> nothing more than <input type="text" value="something"/>.
>> >> >>
>> >> >>
>> >> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> >> news:0F**********************************@microsof t.com...
>> >> >> >I figured out that I have to override the Render method in the
>> >> >> >UserControl.
>> >> >> >
>> >> >> > I do not really understand the HtmlTextWriter. How do I write
>> >> >> > populated
>> >> >> > TextBox controls to the webform?
>> >> >> >
>> >> >> > Thank you for any available help.
>> >> >> > --
>> >> >> > Joe
>> >> >> >
>> >> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> >> > Automation
>> >> >> >
>> >> >> >
>> >> >> > "Joe" wrote:
>> >> >> >
>> >> >> >> Hello All:
>> >> >> >>
>> >> >> >> Do I have to use the LoadControl method of the Page to load a
>> >> >> >> UserControl?
>> >> >> >>
>> >> >> >> I have a class which contains three methods (one public and
>> >> >> >> two
>> >> >> >> private).
>> >> >> >> The class acts as a control server. It "serves" back the
>> >> >> >> required
>> >> >> >> control
>> >> >> >> (either WebControl or UserControl) based on the contents of
>> >> >> >> an
>> >> >> >> xml
>> >> >> >> file.
>> >> >> >> The
>> >> >> >> code in the webform places each control in a TableCell.
>> >> >> >>
>> >> >> >> My problem is that the control server works as far as
>> >> >> >> returning
>> >> >> >> the
>> >> >> >> correct
>> >> >> >> control; but when I view the webform, the UserControl is
>> >> >> >> nowhere
>> >> >> >> to
>> >> >> >> be
>> >> >> >> found.
>> >> >> >> It's not on the page and not in the View Source.
>> >> >> >>
>> >> >> >> Here is the server code (I'm not posting GetWebControl here):
>> >> >> >>
>> >> >> >> Public Function GetControl(ByVal NodeToRender As XmlNode)
>> >> >> >> As
>> >> >> >> Web.UI.Control
>> >> >> >> Dim ValueToMatch As String
>> >> >> >> If NodeToRender.Name.Equals("DisplayText") Then
>> >> >> >> ValueToMatch = NodeToRender.Name.ToLower
>> >> >> >> Else
>> >> >> >> ValueToMatch =
>> >> >> >> NodeToRender.Attributes("type").Value.ToLower
>> >> >> >> End If
>> >> >> >> Select Case ValueToMatch.ToLower
>> >> >> >> Case "label", "textbox", "checkbox",
>> >> >> >> "displaytext"
>> >> >> >> Return GetWebControl(NodeToRender)
>> >> >> >>
>> >> >> >> Case "customaddresses"
>> >> >> >> Return GetUserControl(NodeToRender)
>> >> >> >>
>> >> >> >> End Select
>> >> >> >> End Function
>> >> >> >>
>> >> >> >> Private Function GetUserControl(ByVal NodeToRender As
>> >> >> >> XmlNode)
>> >> >> >> As
>> >> >> >> Web.UI.UserControl
>> >> >> >> Dim uControl As New CustomAddresses
>> >> >> >>
>> >> >> >> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> >> >> >> Return uControl
>> >> >> >> End Function
>> >> >> >>
>> >> >> >> Here is the code and HTML for the UserControl (called
>> >> >> >> CustomAddresses):
>> >> >> >>
>> >> >> >> Public Class CustomAddresses
>> >> >> >> Inherits System.Web.UI.UserControl
>> >> >> >>
>> >> >> >> Public Sub New()
>> >> >> >> Addr1 = New TextBox
>> >> >> >> Addr2 = New TextBox
>> >> >> >> Addr3 = New TextBox
>> >> >> >> Addr4 = New TextBox
>> >> >> >> End Sub
>> >> >> >>
>> >> >> >> Public Sub PopulateAddressBoxes(ByVal str As String)
>> >> >> >> Dim SelectedValue() As String =
>> >> >> >> str.Split(("/").ToCharArray())
>> >> >> >> Dim Name As String = SelectedValue(0).Trim
>> >> >> >> Dim Address() As String =
>> >> >> >> SelectedValue(1).Split((",").ToCharArray())
>> >> >> >> Dim Addr1 As String = Address(0).Trim
>> >> >> >> Dim Addr2 As String = Address(1).Trim
>> >> >> >> Dim City As String = Address(Address.Length - 3).Trim
>> >> >> >> Dim StateProvCd As String = Address(Address.Length -
>> >> >> >> 2).Trim
>> >> >> >> Dim PostalCode As String = Address(Address.Length -
>> >> >> >> 1).Trim
>> >> >> >>
>> >> >> >> Me.Addr1.Text = Name
>> >> >> >> Me.Addr2.Text = Addr1
>> >> >> >> If Not Addr2.Equals(City) Then
>> >> >> >> Me.Addr3.Text = Addr2
>> >> >> >> Me.Addr4.Text = City & " " & StateProvCd & ", " &
>> >> >> >> PostalCode
>> >> >> >> Else
>> >> >> >> Me.Addr3.Text = City & " " & StateProvCd & ", " &
>> >> >> >> PostalCode
>> >> >> >> End If
>> >> >> >> End Sub
>> >> >> >> End Class
>> >> >> >>
>> >> >> >> <%@ Control Language="vb" AutoEventWireup="false"
>> >> >> >> Codebehind="CustomAddresses.ascx.vb"
>> >> >> >> Inherits="WBMI.Claims.CustomAddresses"
>> >> >> >> TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
>> >> >> >> <TABLE class="interior" id="Table1" width="100%">
>> >> >> >> <TR>
>> >> >> >> <TD class="tabledata">
>> >> >> >> <asp:TextBox id="Addr1" runat="server" Width="361px"
>> >> >> >> ReadOnly="False"
>> >> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> >> </TR>
>> >> >> >> <TR>
>> >> >> >> <TD class="tabledata">
>> >> >> >> <asp:TextBox id="Addr2" runat="server" Width="361px"
>> >> >> >> ReadOnly="False"
>> >> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> >> </TR>
>> >> >> >> <TR>
>> >> >> >> <TD class="tabledata">
>> >> >> >> <asp:TextBox id="Addr3" runat="server" Width="361px"
>> >> >> >> ReadOnly="False"
>> >> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> >> </TR>
>> >> >> >> <TR>
>> >> >> >> <TD class="tabledata">
>> >> >> >> <asp:TextBox id="Addr4" runat="server" Width="361px"
>> >> >> >> ReadOnly="False"
>> >> >> >> MaxLength="60"></asp:TextBox></TD>
>> >> >> >> </TR>
>> >> >> >> </TABLE>
>> >> >> >>
>> >> >> >> Here's a sample of the webform code that calls these:
>> >> >> >>
>> >> >> >> If TypeOf
>> >> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNod e(ChildNode))
>> >> >> >> Is
>> >> >> >> WebControl Then
>> >> >> >> ControlToRender =
>> >> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetCont rolNode(ChildNode)),
>> >> >> >> WebControl)

Dec 22 '05 #11
Joe
Hi Marina,

My thread started out with this:

Do I have to use the LoadControl method of the Page to load a UserControl?

I have a class which contains three methods (one public and two private).
The class acts as a control server. It "serves" back the required control
(either WebControl or UserControl) based on the contents of an xml file. The
code in the webform places each control in a TableCell.

**********************
Code and HTML snippets here
**********************

What this boils down to is that I want to create and utilize a ControlServer
class to encapsulate the details about how a control is created and returned.

Can this be done?

I don't see any mention of not wanting to use LoadControl. I asked if I had
to. And, now I know.

BTW, thanks for your help. This solves the problem. I appreicate it.
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
Your thread started out saying you didn't want to use LoadControl, which is
why I was addressing that issue.

Yes, your code would look something like what you have there.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:E0**********************************@microsof t.com...
It can use LoadControl; in fact, I want to use LoadControl because I don't
want to bother overriding the Render method of the UserControl. The
problem
is that I didn't have access to LoadControl from within my class (let's
call
it ControlServer). So I instantiate and call ControlServer class from
within
the Page (I am doing this now).

How would you pass a Page Instance up? Like so?

Dim sC as New ControlServer
sC.SomeMethod(Me, another_data_value)

--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
That's fine. But why can't this unit use LoadControl? That is really the
question.

There are many way to accomplish this central place having access to
whatever page wants the user control created, so it can use the page's
LoadControl.

I think you are getting stuck in trying to box everything up, and not
really
thinking about the functionality here. Only a Page can host a user
control.
Only ASP.NET's engine can parse the .ascx, turn it into an object, use
the
class behind it to render it all. So, whatever black box is going to have
this functionality, is going to need to have access to a Page on way or
another. It could be through inheritance, it could be through passing the
Page instance up, etc.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:73**********************************@microsof t.com...
> Hi Marina,
>
> Only a Page is going to use it.
>
> The point is to encapsulate the process of creating it. To have one
> class
> that accepts information (in this case, an XmlNode that has data that
> the
> class uses to return the appropriate control) and returns a control -
> be
> it a
> WebControl or a UserControl. I've encapsulated the process of
> returning
> WebControls that are then placed in the appropriate places on the Page;
> now I
> want to encapsulate the process of returning UserControls.
>
> Why? Because we want a central unit to handle this functionality.
>
> Any ideas?
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Marina" wrote:
>
>> If this is a usercontrol, nothing but another usercontrol or page can
>> possible do anything with it. It is a visual asp.net user control -
>> windows
>> forms, etc. are not going to be able to do anything with it. Only the
>> ASP.NET engine can process it - which is why LoadControl was created,
>> to
>> do
>> just that. Because a constructor cannot do anything to help with
>> rendering
>> it and instantiating it, and looking at the .ascx, etc etc.
>>
>> So, even if you did manage to encapsulate it, only a page or
>> usercontrol
>> would be able to use it anyway - so why bother?
>>
>> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> news:A2**********************************@microsof t.com...
>> > Hi Marina,
>> >
>> > How would you use LoadControl from within the class that serves the
>> > WebControls/UserControls? LoadControl must be called from a class
>> > that
>> > inherits from the emplateControl class (i.e. Page and UserControl).
>> >
>> > The whole point is to maximize flexibility by encapsulating the
>> > generation
>> > of these controls, so that a webform (or another class) can simply
>> > request
>> > the control that corresponds to an entry in the xml document.
>> >
>> > If you know of another way to do this, please let me know. I would
>> > appreciate any direction that you could provide.
>> >
>> > Thanks,
>> > --
>> > Joe
>> >
>> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>> >
>> >
>> > "Marina" wrote:
>> >
>> >> I don't think this explains why you are against using LoadControl.
>> >>
>> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> news:14**********************************@microsof t.com...
>> >> > Hi Peter,
>> >> >
>> >> > We are using an xml document to "drive" the creation of web
>> >> > pages.
>> >> > The
>> >> > document defines what controls to include on a webform and where
>> >> > where
>> >> > the
>> >> > controls will appear.
>> >> >
>> >> > I have alot of lead-way in defining how the document will be
>> >> > structured
>> >> > and
>> >> > used.
>> >> >
>> >> > My idea was to have a class to encapsulate the generation of the
>> >> > required
>> >> > control (be it a WebControl or a UserControl) and returns it to
>> >> > the
>> >> > webform.
>> >> > In this app, a UserControl is just a grouping of WebControls.
>> >> > For
>> >> > example,
>> >> > one UserControl (CustomAddresses) is four textbox server controls
>> >> > grouped
>> >> > together for name, address1, address2 and city-state-zip. This
>> >> > will
>> >> > be
>> >> > used
>> >> > on the page when it will display a person's addresses.
>> >> >
>> >> > Does this help you understand hat I am really trying to do?
>> >> > --
>> >> > Joe
>> >> >
>> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> > Automation
>> >> >
>> >> >
>> >> > "Peter Rilling" wrote:
>> >> >
>> >> >> Can you clarify more why you don't want to call LoadControl to
>> >> >> load
>> >> >> the
>> >> >> control. The reason LoadControl exists is so that ASP.NET has
>> >> >> the
>> >> >> ability
>> >> >> to prepare the object has it expects such as loading the ASCX
>> >> >> and
>> >> >> creating
>> >> >> an object model. If you create one with a constructor, then you
>> >> >> prevent
>> >> >> the
>> >> >> engine from doing what it was suppose to.
>> >> >>
>> >> >> All controls have the Render method, but you should not override
>> >> >> that
>> >> >> in
>> >> >> a
>> >> >> usercontrol. There are such things as custom web controls which
>> >> >> inherit
>> >> >> from WebControl which you can then override the Render method.
>> >> >>
>> >> >> All the HtmlTextWriter does is allow you to output the HTML. A
>> >> >> textbox
>> >> >> is
>> >> >> nothing more than <input type="text" value="something"/>.
>> >> >>
>> >> >>
>> >> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> >> news:0F**********************************@microsof t.com...
>> >> >> >I figured out that I have to override the Render method in the
>> >> >> >UserControl.
>> >> >> >
>> >> >> > I do not really understand the HtmlTextWriter. How do I write
>> >> >> > populated
>> >> >> > TextBox controls to the webform?
>> >> >> >
>> >> >> > Thank you for any available help.
>> >> >> > --
>> >> >> > Joe
>> >> >> >
>> >> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> >> > Automation
>> >> >> >
>> >> >> >
>> >> >> > "Joe" wrote:
>> >> >> >
>> >> >> >> Hello All:
>> >> >> >>
>> >> >> >> Do I have to use the LoadControl method of the Page to load a
>> >> >> >> UserControl?
>> >> >> >>
>> >> >> >> I have a class which contains three methods (one public and
>> >> >> >> two
>> >> >> >> private).
>> >> >> >> The class acts as a control server. It "serves" back the
>> >> >> >> required
>> >> >> >> control
>> >> >> >> (either WebControl or UserControl) based on the contents of
>> >> >> >> an
>> >> >> >> xml
>> >> >> >> file.
>> >> >> >> The
>> >> >> >> code in the webform places each control in a TableCell.
>> >> >> >>
>> >> >> >> My problem is that the control server works as far as
>> >> >> >> returning
>> >> >> >> the
>> >> >> >> correct
>> >> >> >> control; but when I view the webform, the UserControl is
>> >> >> >> nowhere
>> >> >> >> to
>> >> >> >> be
>> >> >> >> found.
>> >> >> >> It's not on the page and not in the View Source.
>> >> >> >>
>> >> >> >> Here is the server code (I'm not posting GetWebControl here):
>> >> >> >>
>> >> >> >> Public Function GetControl(ByVal NodeToRender As XmlNode)
>> >> >> >> As
>> >> >> >> Web.UI.Control
>> >> >> >> Dim ValueToMatch As String
>> >> >> >> If NodeToRender.Name.Equals("DisplayText") Then
>> >> >> >> ValueToMatch = NodeToRender.Name.ToLower
>> >> >> >> Else
>> >> >> >> ValueToMatch =
>> >> >> >> NodeToRender.Attributes("type").Value.ToLower
>> >> >> >> End If
>> >> >> >> Select Case ValueToMatch.ToLower
>> >> >> >> Case "label", "textbox", "checkbox",
>> >> >> >> "displaytext"
>> >> >> >> Return GetWebControl(NodeToRender)
>> >> >> >>
>> >> >> >> Case "customaddresses"
>> >> >> >> Return GetUserControl(NodeToRender)
>> >> >> >>
>> >> >> >> End Select
>> >> >> >> End Function
>> >> >> >>
>> >> >> >> Private Function GetUserControl(ByVal NodeToRender As
>> >> >> >> XmlNode)
>> >> >> >> As
>> >> >> >> Web.UI.UserControl
>> >> >> >> Dim uControl As New CustomAddresses
>> >> >> >>
>> >> >> >> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> >> >> >> Return uControl
>> >> >> >> End Function
>> >> >> >>
>> >> >> >> Here is the code and HTML for the UserControl (called
>> >> >> >> CustomAddresses):
>> >> >> >>
>> >> >> >> Public Class CustomAddresses
>> >> >> >> Inherits System.Web.UI.UserControl
>> >> >> >>
>> >> >> >> Public Sub New()
>> >> >> >> Addr1 = New TextBox
>> >> >> >> Addr2 = New TextBox
>> >> >> >> Addr3 = New TextBox
>> >> >> >> Addr4 = New TextBox
>> >> >> >> End Sub
>> >> >> >>
>> >> >> >> Public Sub PopulateAddressBoxes(ByVal str As String)
>> >> >> >> Dim SelectedValue() As String =
>> >> >> >> str.Split(("/").ToCharArray())
>> >> >> >> Dim Name As String = SelectedValue(0).Trim
>> >> >> >> Dim Address() As String =
>> >> >> >> SelectedValue(1).Split((",").ToCharArray())
>> >> >> >> Dim Addr1 As String = Address(0).Trim
>> >> >> >> Dim Addr2 As String = Address(1).Trim
>> >> >> >> Dim City As String = Address(Address.Length - 3).Trim
>> >> >> >> Dim StateProvCd As String = Address(Address.Length -
>> >> >> >> 2).Trim
>> >> >> >> Dim PostalCode As String = Address(Address.Length -
>> >> >> >> 1).Trim
>> >> >> >>

Dec 22 '05 #12
It came off that way, and from reading Peter's response, it seems to have
gotten that impression as well. Especially the subject where you ask about
using the New operator to do the instantiation.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:B3**********************************@microsof t.com...
Hi Marina,

My thread started out with this:

Do I have to use the LoadControl method of the Page to load a UserControl?

I have a class which contains three methods (one public and two private).
The class acts as a control server. It "serves" back the required control
(either WebControl or UserControl) based on the contents of an xml file.
The
code in the webform places each control in a TableCell.

**********************
Code and HTML snippets here
**********************

What this boils down to is that I want to create and utilize a
ControlServer
class to encapsulate the details about how a control is created and
returned.

Can this be done?

I don't see any mention of not wanting to use LoadControl. I asked if I
had
to. And, now I know.

BTW, thanks for your help. This solves the problem. I appreicate it.
--
Joe

VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
"Marina" wrote:
Your thread started out saying you didn't want to use LoadControl, which
is
why I was addressing that issue.

Yes, your code would look something like what you have there.

"Joe" <jo******@donotspam.yahoo.com> wrote in message
news:E0**********************************@microsof t.com...
> It can use LoadControl; in fact, I want to use LoadControl because I
> don't
> want to bother overriding the Render method of the UserControl. The
> problem
> is that I didn't have access to LoadControl from within my class (let's
> call
> it ControlServer). So I instantiate and call ControlServer class from
> within
> the Page (I am doing this now).
>
> How would you pass a Page Instance up? Like so?
>
> Dim sC as New ControlServer
> sC.SomeMethod(Me, another_data_value)
>
> --
> Joe
>
> VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>
>
> "Marina" wrote:
>
>> That's fine. But why can't this unit use LoadControl? That is really
>> the
>> question.
>>
>> There are many way to accomplish this central place having access to
>> whatever page wants the user control created, so it can use the page's
>> LoadControl.
>>
>> I think you are getting stuck in trying to box everything up, and not
>> really
>> thinking about the functionality here. Only a Page can host a user
>> control.
>> Only ASP.NET's engine can parse the .ascx, turn it into an object, use
>> the
>> class behind it to render it all. So, whatever black box is going to
>> have
>> this functionality, is going to need to have access to a Page on way
>> or
>> another. It could be through inheritance, it could be through passing
>> the
>> Page instance up, etc.
>>
>> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> news:73**********************************@microsof t.com...
>> > Hi Marina,
>> >
>> > Only a Page is going to use it.
>> >
>> > The point is to encapsulate the process of creating it. To have one
>> > class
>> > that accepts information (in this case, an XmlNode that has data
>> > that
>> > the
>> > class uses to return the appropriate control) and returns a
>> > control -
>> > be
>> > it a
>> > WebControl or a UserControl. I've encapsulated the process of
>> > returning
>> > WebControls that are then placed in the appropriate places on the
>> > Page;
>> > now I
>> > want to encapsulate the process of returning UserControls.
>> >
>> > Why? Because we want a central unit to handle this functionality.
>> >
>> > Any ideas?
>> > --
>> > Joe
>> >
>> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA Automation
>> >
>> >
>> > "Marina" wrote:
>> >
>> >> If this is a usercontrol, nothing but another usercontrol or page
>> >> can
>> >> possible do anything with it. It is a visual asp.net user control -
>> >> windows
>> >> forms, etc. are not going to be able to do anything with it. Only
>> >> the
>> >> ASP.NET engine can process it - which is why LoadControl was
>> >> created,
>> >> to
>> >> do
>> >> just that. Because a constructor cannot do anything to help with
>> >> rendering
>> >> it and instantiating it, and looking at the .ascx, etc etc.
>> >>
>> >> So, even if you did manage to encapsulate it, only a page or
>> >> usercontrol
>> >> would be able to use it anyway - so why bother?
>> >>
>> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> news:A2**********************************@microsof t.com...
>> >> > Hi Marina,
>> >> >
>> >> > How would you use LoadControl from within the class that serves
>> >> > the
>> >> > WebControls/UserControls? LoadControl must be called from a
>> >> > class
>> >> > that
>> >> > inherits from the emplateControl class (i.e. Page and
>> >> > UserControl).
>> >> >
>> >> > The whole point is to maximize flexibility by encapsulating the
>> >> > generation
>> >> > of these controls, so that a webform (or another class) can
>> >> > simply
>> >> > request
>> >> > the control that corresponds to an entry in the xml document.
>> >> >
>> >> > If you know of another way to do this, please let me know. I
>> >> > would
>> >> > appreciate any direction that you could provide.
>> >> >
>> >> > Thanks,
>> >> > --
>> >> > Joe
>> >> >
>> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> > Automation
>> >> >
>> >> >
>> >> > "Marina" wrote:
>> >> >
>> >> >> I don't think this explains why you are against using
>> >> >> LoadControl.
>> >> >>
>> >> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> >> news:14**********************************@microsof t.com...
>> >> >> > Hi Peter,
>> >> >> >
>> >> >> > We are using an xml document to "drive" the creation of web
>> >> >> > pages.
>> >> >> > The
>> >> >> > document defines what controls to include on a webform and
>> >> >> > where
>> >> >> > where
>> >> >> > the
>> >> >> > controls will appear.
>> >> >> >
>> >> >> > I have alot of lead-way in defining how the document will be
>> >> >> > structured
>> >> >> > and
>> >> >> > used.
>> >> >> >
>> >> >> > My idea was to have a class to encapsulate the generation of
>> >> >> > the
>> >> >> > required
>> >> >> > control (be it a WebControl or a UserControl) and returns it
>> >> >> > to
>> >> >> > the
>> >> >> > webform.
>> >> >> > In this app, a UserControl is just a grouping of WebControls.
>> >> >> > For
>> >> >> > example,
>> >> >> > one UserControl (CustomAddresses) is four textbox server
>> >> >> > controls
>> >> >> > grouped
>> >> >> > together for name, address1, address2 and city-state-zip.
>> >> >> > This
>> >> >> > will
>> >> >> > be
>> >> >> > used
>> >> >> > on the page when it will display a person's addresses.
>> >> >> >
>> >> >> > Does this help you understand hat I am really trying to do?
>> >> >> > --
>> >> >> > Joe
>> >> >> >
>> >> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> >> > Automation
>> >> >> >
>> >> >> >
>> >> >> > "Peter Rilling" wrote:
>> >> >> >
>> >> >> >> Can you clarify more why you don't want to call LoadControl
>> >> >> >> to
>> >> >> >> load
>> >> >> >> the
>> >> >> >> control. The reason LoadControl exists is so that ASP.NET
>> >> >> >> has
>> >> >> >> the
>> >> >> >> ability
>> >> >> >> to prepare the object has it expects such as loading the ASCX
>> >> >> >> and
>> >> >> >> creating
>> >> >> >> an object model. If you create one with a constructor, then
>> >> >> >> you
>> >> >> >> prevent
>> >> >> >> the
>> >> >> >> engine from doing what it was suppose to.
>> >> >> >>
>> >> >> >> All controls have the Render method, but you should not
>> >> >> >> override
>> >> >> >> that
>> >> >> >> in
>> >> >> >> a
>> >> >> >> usercontrol. There are such things as custom web controls
>> >> >> >> which
>> >> >> >> inherit
>> >> >> >> from WebControl which you can then override the Render
>> >> >> >> method.
>> >> >> >>
>> >> >> >> All the HtmlTextWriter does is allow you to output the HTML.
>> >> >> >> A
>> >> >> >> textbox
>> >> >> >> is
>> >> >> >> nothing more than <input type="text" value="something"/>.
>> >> >> >>
>> >> >> >>
>> >> >> >> "Joe" <jo******@donotspam.yahoo.com> wrote in message
>> >> >> >> news:0F**********************************@microsof t.com...
>> >> >> >> >I figured out that I have to override the Render method in
>> >> >> >> >the
>> >> >> >> >UserControl.
>> >> >> >> >
>> >> >> >> > I do not really understand the HtmlTextWriter. How do I
>> >> >> >> > write
>> >> >> >> > populated
>> >> >> >> > TextBox controls to the webform?
>> >> >> >> >
>> >> >> >> > Thank you for any available help.
>> >> >> >> > --
>> >> >> >> > Joe
>> >> >> >> >
>> >> >> >> > VB.NET/C#/ASP.NET/ASP/VB/C++/Web and DB development/VBA
>> >> >> >> > Automation
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > "Joe" wrote:
>> >> >> >> >
>> >> >> >> >> Hello All:
>> >> >> >> >>
>> >> >> >> >> Do I have to use the LoadControl method of the Page to
>> >> >> >> >> load a
>> >> >> >> >> UserControl?
>> >> >> >> >>
>> >> >> >> >> I have a class which contains three methods (one public
>> >> >> >> >> and
>> >> >> >> >> two
>> >> >> >> >> private).
>> >> >> >> >> The class acts as a control server. It "serves" back the
>> >> >> >> >> required
>> >> >> >> >> control
>> >> >> >> >> (either WebControl or UserControl) based on the contents
>> >> >> >> >> of
>> >> >> >> >> an
>> >> >> >> >> xml
>> >> >> >> >> file.
>> >> >> >> >> The
>> >> >> >> >> code in the webform places each control in a TableCell.
>> >> >> >> >>
>> >> >> >> >> My problem is that the control server works as far as
>> >> >> >> >> returning
>> >> >> >> >> the
>> >> >> >> >> correct
>> >> >> >> >> control; but when I view the webform, the UserControl is
>> >> >> >> >> nowhere
>> >> >> >> >> to
>> >> >> >> >> be
>> >> >> >> >> found.
>> >> >> >> >> It's not on the page and not in the View Source.
>> >> >> >> >>
>> >> >> >> >> Here is the server code (I'm not posting GetWebControl
>> >> >> >> >> here):
>> >> >> >> >>
>> >> >> >> >> Public Function GetControl(ByVal NodeToRender As
>> >> >> >> >> XmlNode)
>> >> >> >> >> As
>> >> >> >> >> Web.UI.Control
>> >> >> >> >> Dim ValueToMatch As String
>> >> >> >> >> If NodeToRender.Name.Equals("DisplayText") Then
>> >> >> >> >> ValueToMatch = NodeToRender.Name.ToLower
>> >> >> >> >> Else
>> >> >> >> >> ValueToMatch =
>> >> >> >> >> NodeToRender.Attributes("type").Value.ToLower
>> >> >> >> >> End If
>> >> >> >> >> Select Case ValueToMatch.ToLower
>> >> >> >> >> Case "label", "textbox", "checkbox",
>> >> >> >> >> "displaytext"
>> >> >> >> >> Return GetWebControl(NodeToRender)
>> >> >> >> >>
>> >> >> >> >> Case "customaddresses"
>> >> >> >> >> Return GetUserControl(NodeToRender)
>> >> >> >> >>
>> >> >> >> >> End Select
>> >> >> >> >> End Function
>> >> >> >> >>
>> >> >> >> >> Private Function GetUserControl(ByVal NodeToRender As
>> >> >> >> >> XmlNode)
>> >> >> >> >> As
>> >> >> >> >> Web.UI.UserControl
>> >> >> >> >> Dim uControl As New CustomAddresses
>> >> >> >> >>
>> >> >> >> >> uControl.PopulateAddressBoxes(NodeToRender.Attribu tes("value").Value.Trim)
>> >> >> >> >> Return uControl
>> >> >> >> >> End Function
>> >> >> >> >>
>> >> >> >> >> Here is the code and HTML for the UserControl (called
>> >> >> >> >> CustomAddresses):
>> >> >> >> >>
>> >> >> >> >> Public Class CustomAddresses
>> >> >> >> >> Inherits System.Web.UI.UserControl
>> >> >> >> >>
>> >> >> >> >> Public Sub New()
>> >> >> >> >> Addr1 = New TextBox
>> >> >> >> >> Addr2 = New TextBox
>> >> >> >> >> Addr3 = New TextBox
>> >> >> >> >> Addr4 = New TextBox
>> >> >> >> >> End Sub
>> >> >> >> >>
>> >> >> >> >> Public Sub PopulateAddressBoxes(ByVal str As String)
>> >> >> >> >> Dim SelectedValue() As String =
>> >> >> >> >> str.Split(("/").ToCharArray())
>> >> >> >> >> Dim Name As String = SelectedValue(0).Trim
>> >> >> >> >> Dim Address() As String =
>> >> >> >> >> SelectedValue(1).Split((",").ToCharArray())
>> >> >> >> >> Dim Addr1 As String = Address(0).Trim
>> >> >> >> >> Dim Addr2 As String = Address(1).Trim
>> >> >> >> >> Dim City As String = Address(Address.Length -
>> >> >> >> >> 3).Trim
>> >> >> >> >> Dim StateProvCd As String =
>> >> >> >> >> Address(Address.Length -
>> >> >> >> >> 2).Trim
>> >> >> >> >> Dim PostalCode As String =
>> >> >> >> >> Address(Address.Length -
>> >> >> >> >> 1).Trim
>> >> >> >> >>

Dec 22 '05 #13

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by John | last post: by
1 post views Thread by Sundaresan | last post: by
2 posts views Thread by Eric | last post: by
reply views Thread by Phl | last post: by
1 post views Thread by Nathan Sokalski | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.