Home All Groups Group Topic Archive Search About

Loading UserControl using New Contructor

Author
22 Dec 2005 4:09 PM
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.Attributes("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.GetControlNode(ChildNode)) Is
WebControl Then
   ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
WebControl)

ElseIf TypeOf
SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
UserControl Then
   ControlToRender =
CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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

Author
22 Dec 2005 4:36 PM
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


Show quoteHide quote
"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.Attributes("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.GetControlNode(ChildNode)) Is
> WebControl Then
>    ControlToRender =
> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
> WebControl)
>
>  ElseIf TypeOf
> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
> UserControl Then
>    ControlToRender =
> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
Are all your drivers up to date? click for free checkup

Author
22 Dec 2005 4:50 PM
Peter Rilling
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"/>.


Show quoteHide quote
"Joe" <joeherro@donotspam.yahoo.com> wrote in message
news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
>> Is
>> WebControl Then
>>    ControlToRender =
>> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
>> WebControl)
>>
>>  ElseIf TypeOf
>> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
>> UserControl Then
>>    ControlToRender =
>> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
Author
22 Dec 2005 5:19 PM
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


Show quoteHide quote
"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" <joeherro@donotspam.yahoo.com> wrote in message
> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
> >> Is
> >> WebControl Then
> >>    ControlToRender =
> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
> >> WebControl)
> >>
> >>  ElseIf TypeOf
> >> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
> >> UserControl Then
> >>    ControlToRender =
> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
>
>
>
Author
22 Dec 2005 7:07 PM
Marina
I don't think this explains why you are against using LoadControl.

Show quoteHide quote
"Joe" <joeherro@donotspam.yahoo.com> wrote in message
news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
>> >> Is
>> >> WebControl Then
>> >>    ControlToRender =
>> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
>> >> WebControl)
>> >>
>> >>  ElseIf TypeOf
>> >> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
>> >> UserControl Then
>> >>    ControlToRender =
>> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
>>
>>
>>
Author
22 Dec 2005 7:32 PM
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


Show quoteHide quote
"Marina" wrote:

> I don't think this explains why you are against using LoadControl.
>
> "Joe" <joeherro@donotspam.yahoo.com> wrote in message
> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
> >> >> Is
> >> >> WebControl Then
> >> >>    ControlToRender =
> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
> >> >> WebControl)
> >> >>
> >> >>  ElseIf TypeOf
> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
> >> >> UserControl Then
> >> >>    ControlToRender =
> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
> >>
> >>
> >>
>
>
>
Author
22 Dec 2005 7:43 PM
Marina
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?

Show quoteHide quote
"Joe" <joeherro@donotspam.yahoo.com> wrote in message
news:A22FF11D-8E8C-4FF2-AE02-D96038721CCD@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
>> >> >> Is
>> >> >> WebControl Then
>> >> >>    ControlToRender =
>> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
>> >> >> WebControl)
>> >> >>
>> >> >>  ElseIf TypeOf
>> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
>> >> >> UserControl Then
>> >> >>    ControlToRender =
>> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
>> >>
>> >>
>> >>
>>
>>
>>
Author
22 Dec 2005 8:19 PM
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


Show quoteHide quote
"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" <joeherro@donotspam.yahoo.com> wrote in message
> news:A22FF11D-8E8C-4FF2-AE02-D96038721CCD@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
> >> >> >> Is
> >> >> >> WebControl Then
> >> >> >>    ControlToRender =
> >> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
> >> >> >> WebControl)
> >> >> >>
> >> >> >>  ElseIf TypeOf
> >> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)) Is
> >> >> >> UserControl Then
> >> >> >>    ControlToRender =
> >> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
> >> >>
> >> >>
> >> >>
> >>
> >>
> >>
>
>
>
Author
22 Dec 2005 8:24 PM
Marina
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.

Show quoteHide quote
"Joe" <joeherro@donotspam.yahoo.com> wrote in message
news:737D8DD8-7E5F-4B6F-B105-D6DA94808166@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> news:A22FF11D-8E8C-4FF2-AE02-D96038721CCD@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
>> >> >> >> Is
>> >> >> >> WebControl Then
>> >> >> >>    ControlToRender =
>> >> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
>> >> >> >> WebControl)
>> >> >> >>
>> >> >> >>  ElseIf TypeOf
>> >> >> >> SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode))
>> >> >> >> Is
>> >> >> >> UserControl Then
>> >> >> >>    ControlToRender =
>> >> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(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
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>
>>
Author
22 Dec 2005 8:36 PM
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


Show quoteHide quote
"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" <joeherro@donotspam.yahoo.com> wrote in message
> news:737D8DD8-7E5F-4B6F-B105-D6DA94808166@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> news:A22FF11D-8E8C-4FF2-AE02-D96038721CCD@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> >> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> >> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
> >> >> >> >> Is
> >> >> >> >> WebControl Then
> >> >> >> >>    ControlToRender =
> >> >> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
> >> >> >> >> WebControl)
Author
22 Dec 2005 8:42 PM
Marina
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.

Show quoteHide quote
"Joe" <joeherro@donotspam.yahoo.com> wrote in message
news:E0D9317C-C176-45D1-B4FD-F1044E370102@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> news:737D8DD8-7E5F-4B6F-B105-D6DA94808166@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> news:A22FF11D-8E8C-4FF2-AE02-D96038721CCD@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> >> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> >> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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.GetControlNode(ChildNode))
>> >> >> >> >> Is
>> >> >> >> >> WebControl Then
>> >> >> >> >>    ControlToRender =
>> >> >> >> >> CType(SvrControl.GetControl(m_FormTemplate.GetControlNode(ChildNode)),
>> >> >> >> >> WebControl)
Author
22 Dec 2005 8:52 PM
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


Show quoteHide quote
"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" <joeherro@donotspam.yahoo.com> wrote in message
> news:E0D9317C-C176-45D1-B4FD-F1044E370102@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> news:737D8DD8-7E5F-4B6F-B105-D6DA94808166@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> >> news:A22FF11D-8E8C-4FF2-AE02-D96038721CCD@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> >> >> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
> >> >> >> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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
> >> >> >> >> >>
Author
22 Dec 2005 8:57 PM
Marina
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.

Show quoteHide quote
"Joe" <joeherro@donotspam.yahoo.com> wrote in message
news:B34014AF-A20E-4796-888E-8D2D76B0906D@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> news:E0D9317C-C176-45D1-B4FD-F1044E370102@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> news:737D8DD8-7E5F-4B6F-B105-D6DA94808166@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> >> news:A22FF11D-8E8C-4FF2-AE02-D96038721CCD@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> >> >> news:1412A66C-FDE3-491E-8426-7F2379461567@microsoft.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" <joeherro@donotspam.yahoo.com> wrote in message
>> >> >> >> >> news:0FF81938-2689-42C0-886B-1B0FE9D97972@microsoft.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.Attributes("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
>> >> >> >> >> >>

Bookmark and Share