Multiple Placeholders or One to load controls

Discussion in 'ASP .Net' started by tshad, Jul 30, 2007.

  1. tshad

    tshad Guest

    I am using asp.net 1.1 and am creating my pages with different looks and
    using controls for each part of the page (top, bottom, navigation etc)

    The way I have it set up is the following where I have 4 different controls
    (one for each page part). I am looking at a couple other ways of doing this
    as well and was wondering if there is a drawback to doing the others.

    *****************************************
    <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    ResponseEncoding="iso-8859-1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <script runat="server">
    Sub Page_Load(sender as Object, e as EventArgs)
    Dim pageTop as String
    Dim navigateTop as String
    Dim pageBottom as String
    Dim pageTopControl as Control
    Dim navigateTopControl as Control
    Dim pageBottomControl as Control
    Dim LogonControl as Control
    Dim skinArray as ArrayList = Application("SkinArray")

    pageTop = "PageTop.ascx"
    navigateTop = "NavigateTop.ascx"
    pageBottom = "PageBottom.ascx"

    pageTopControl = LoadControl(pageTop)
    PageTopPanel.Controls.Add(pageTopControl)
    navigateTopControl = LoadControl(navigateTop)
    NavigateTopPanel.Controls.Add(navigateTopControl)
    LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    LogonPanel.Controls.Add(LogonControl)
    pageBottomControl = LoadControl(pageBottom)
    PageBottomPanel.Controls.Add(pageBottomControl)
    end Sub
    </script>

    <html>
    <head>
    <title>:: Staffing Workshop ::</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    marginheight="0" runat="server">
    <form id="addForm" runat="server">

    <asp:placeHolder ID="PageTopPanel" runat="server"/>
    <asp:placeHolder ID="NavigateTopPanel" runat="server"/>
    <asp:placeHolder ID="LogonPanel" runat="server"/>
    <asp:placeHolder ID="PageBottomPanel" runat="server"/>

    </form>
    </body>
    </html>
    ******************************************

    Another way is to have only one Placeholder and load them one by one. Not
    sure if this would have any performance impact or not. I am still loading 4
    pages. Would the controls always display in the order they are loaded into
    the PlaceHolder?

    *****************************************
    <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    ResponseEncoding="iso-8859-1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <script runat="server">
    Sub Page_Load(sender as Object, e as EventArgs)
    Dim pageTop as String
    Dim navigateTop as String
    Dim pageBottom as String
    Dim pageTopControl as Control
    Dim navigateTopControl as Control
    Dim pageBottomControl as Control
    Dim LogonControl as Control
    Dim skinArray as ArrayList = Application("SkinArray")

    pageTop = "PageTop.ascx"
    navigateTop = "NavigateTop.ascx"
    pageBottom = "PageBottom.ascx"

    pageTopControl = LoadControl(pageTop)
    thePlaceHolder.Controls.Add(pageTopControl)
    navigateTopControl = LoadControl(navigateTop)
    thePlaceHolder.Controls.Add(navigateTopControl)
    LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    thePlaceHolder.Controls.Add(LogonControl)
    pageBottomControl = LoadControl(pageBottom)
    thePlaceHolder.Controls.Add(pageBottomControl)
    end Sub
    </script>

    <html>
    <head>
    <title>:: Staffing Workshop ::</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    marginheight="0" runat="server">
    <form id="addForm" runat="server">

    <asp:placeHolder ID="thePlaceHolder" runat="server"/>

    </form>
    </body>
    </html>
    ******************************************

    The other way is to just build the whole page and have that page as a
    control and have it just load the content section as a control
    (DisplayCompanyJobs.ascx in my example).

    Not sure if I would be saving a lot here as I am still loading a couple of
    pages.

    Thanks,

    Tom
    tshad, Jul 30, 2007
    #1
    1. Advertising

  2. It's kind of hard to advise you without knowing a bit more about your
    requirements and design. For example, from your code, I don't see why you're
    using all that logic to load the User Controls into the page, when you could
    just reference them with tags in the page markup.

    --
    HTH,

    Kevin Spencer
    Microsoft MVP

    Printing Components, Email Components,
    FTP Client Classes, Enhanced Data Controls, much more.
    DSI PrintManager, Miradyne Component Libraries:
    http://www.miradyne.net

    "tshad" <> wrote in message
    news:...
    >I am using asp.net 1.1 and am creating my pages with different looks and
    >using controls for each part of the page (top, bottom, navigation etc)
    >
    > The way I have it set up is the following where I have 4 different
    > controls (one for each page part). I am looking at a couple other ways of
    > doing this as well and was wondering if there is a drawback to doing the
    > others.
    >
    > *****************************************
    > <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    > ResponseEncoding="iso-8859-1" %>
    > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    > "http://www.w3.org/TR/html4/loose.dtd">
    > <script runat="server">
    > Sub Page_Load(sender as Object, e as EventArgs)
    > Dim pageTop as String
    > Dim navigateTop as String
    > Dim pageBottom as String
    > Dim pageTopControl as Control
    > Dim navigateTopControl as Control
    > Dim pageBottomControl as Control
    > Dim LogonControl as Control
    > Dim skinArray as ArrayList = Application("SkinArray")
    >
    > pageTop = "PageTop.ascx"
    > navigateTop = "NavigateTop.ascx"
    > pageBottom = "PageBottom.ascx"
    >
    > pageTopControl = LoadControl(pageTop)
    > PageTopPanel.Controls.Add(pageTopControl)
    > navigateTopControl = LoadControl(navigateTop)
    > NavigateTopPanel.Controls.Add(navigateTopControl)
    > LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    > LogonPanel.Controls.Add(LogonControl)
    > pageBottomControl = LoadControl(pageBottom)
    > PageBottomPanel.Controls.Add(pageBottomControl)
    > end Sub
    > </script>
    >
    > <html>
    > <head>
    > <title>:: Staffing Workshop ::</title>
    > <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    > <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    > marginheight="0" runat="server">
    > <form id="addForm" runat="server">
    >
    > <asp:placeHolder ID="PageTopPanel" runat="server"/>
    > <asp:placeHolder ID="NavigateTopPanel" runat="server"/>
    > <asp:placeHolder ID="LogonPanel" runat="server"/>
    > <asp:placeHolder ID="PageBottomPanel" runat="server"/>
    >
    > </form>
    > </body>
    > </html>
    > ******************************************
    >
    > Another way is to have only one Placeholder and load them one by one. Not
    > sure if this would have any performance impact or not. I am still loading
    > 4 pages. Would the controls always display in the order they are loaded
    > into the PlaceHolder?
    >
    > *****************************************
    > <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    > ResponseEncoding="iso-8859-1" %>
    > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    > "http://www.w3.org/TR/html4/loose.dtd">
    > <script runat="server">
    > Sub Page_Load(sender as Object, e as EventArgs)
    > Dim pageTop as String
    > Dim navigateTop as String
    > Dim pageBottom as String
    > Dim pageTopControl as Control
    > Dim navigateTopControl as Control
    > Dim pageBottomControl as Control
    > Dim LogonControl as Control
    > Dim skinArray as ArrayList = Application("SkinArray")
    >
    > pageTop = "PageTop.ascx"
    > navigateTop = "NavigateTop.ascx"
    > pageBottom = "PageBottom.ascx"
    >
    > pageTopControl = LoadControl(pageTop)
    > thePlaceHolder.Controls.Add(pageTopControl)
    > navigateTopControl = LoadControl(navigateTop)
    > thePlaceHolder.Controls.Add(navigateTopControl)
    > LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    > thePlaceHolder.Controls.Add(LogonControl)
    > pageBottomControl = LoadControl(pageBottom)
    > thePlaceHolder.Controls.Add(pageBottomControl)
    > end Sub
    > </script>
    >
    > <html>
    > <head>
    > <title>:: Staffing Workshop ::</title>
    > <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    > <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    > marginheight="0" runat="server">
    > <form id="addForm" runat="server">
    >
    > <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    >
    > </form>
    > </body>
    > </html>
    > ******************************************
    >
    > The other way is to just build the whole page and have that page as a
    > control and have it just load the content section as a control
    > (DisplayCompanyJobs.ascx in my example).
    >
    > Not sure if I would be saving a lot here as I am still loading a couple of
    > pages.
    >
    > Thanks,
    >
    > Tom
    >
    >
    >
    Kevin Spencer, Jul 31, 2007
    #2
    1. Advertising

  3. tshad

    tshad Guest

    "Kevin Spencer" <> wrote in message
    news:...
    > It's kind of hard to advise you without knowing a bit more about your
    > requirements and design. For example, from your code, I don't see why
    > you're using all that logic to load the User Controls into the page, when
    > you could just reference them with tags in the page markup.


    Each one of the Controls is a different part of the page, mainly html code.
    The Content control has all the asp.net code with textboxes, labels,
    datagrids etc.

    Each control is different for each client and the controls come from
    different folders depending on the client. This is why the controls are not
    static. The PageTop control could be "skins\ft\displaypage.ascx" for one
    client and "skins\jl\displaypage.ascx" for another. I am not showing the
    whole code to make it simpler for my example. I would normally build the
    Folders (skins\ft for example) based on a session variable.

    Originally, I had multiple controls because I was thinking that the Forms
    tags need to be only around the Content Control (LogonControl ), in my
    example.

    Now I find that I can put the Forms tag around all the controls without any
    problems. So that being the case, I could just set up the 2nd example
    (thePlaceHolder), which just houses all the controls. Not sure if I am
    gaining anything here.

    The last case was just to have the whole page built for each client and on
    each page are the controls I need (content and navigation mainly) and just
    access the controls that way.

    Thanks,

    Tom
    >
    > --
    > HTH,
    >
    > Kevin Spencer
    > Microsoft MVP
    >
    > Printing Components, Email Components,
    > FTP Client Classes, Enhanced Data Controls, much more.
    > DSI PrintManager, Miradyne Component Libraries:
    > http://www.miradyne.net
    >
    > "tshad" <> wrote in message
    > news:...
    >>I am using asp.net 1.1 and am creating my pages with different looks and
    >>using controls for each part of the page (top, bottom, navigation etc)
    >>
    >> The way I have it set up is the following where I have 4 different
    >> controls (one for each page part). I am looking at a couple other ways
    >> of doing this as well and was wondering if there is a drawback to doing
    >> the others.
    >>
    >> *****************************************
    >> <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    >> ResponseEncoding="iso-8859-1" %>
    >> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >> "http://www.w3.org/TR/html4/loose.dtd">
    >> <script runat="server">
    >> Sub Page_Load(sender as Object, e as EventArgs)
    >> Dim pageTop as String
    >> Dim navigateTop as String
    >> Dim pageBottom as String
    >> Dim pageTopControl as Control
    >> Dim navigateTopControl as Control
    >> Dim pageBottomControl as Control
    >> Dim LogonControl as Control
    >> Dim skinArray as ArrayList = Application("SkinArray")
    >>
    >> pageTop = "PageTop.ascx"
    >> navigateTop = "NavigateTop.ascx"
    >> pageBottom = "PageBottom.ascx"
    >>
    >> pageTopControl = LoadControl(pageTop)
    >> PageTopPanel.Controls.Add(pageTopControl)
    >> navigateTopControl = LoadControl(navigateTop)
    >> NavigateTopPanel.Controls.Add(navigateTopControl)
    >> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >> LogonPanel.Controls.Add(LogonControl)
    >> pageBottomControl = LoadControl(pageBottom)
    >> PageBottomPanel.Controls.Add(pageBottomControl)
    >> end Sub
    >> </script>
    >>
    >> <html>
    >> <head>
    >> <title>:: Staffing Workshop ::</title>
    >> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    >> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >> marginheight="0" runat="server">
    >> <form id="addForm" runat="server">
    >>
    >> <asp:placeHolder ID="PageTopPanel" runat="server"/>
    >> <asp:placeHolder ID="NavigateTopPanel" runat="server"/>
    >> <asp:placeHolder ID="LogonPanel" runat="server"/>
    >> <asp:placeHolder ID="PageBottomPanel" runat="server"/>
    >>
    >> </form>
    >> </body>
    >> </html>
    >> ******************************************
    >>
    >> Another way is to have only one Placeholder and load them one by one.
    >> Not sure if this would have any performance impact or not. I am still
    >> loading 4 pages. Would the controls always display in the order they are
    >> loaded into the PlaceHolder?
    >>
    >> *****************************************
    >> <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    >> ResponseEncoding="iso-8859-1" %>
    >> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >> "http://www.w3.org/TR/html4/loose.dtd">
    >> <script runat="server">
    >> Sub Page_Load(sender as Object, e as EventArgs)
    >> Dim pageTop as String
    >> Dim navigateTop as String
    >> Dim pageBottom as String
    >> Dim pageTopControl as Control
    >> Dim navigateTopControl as Control
    >> Dim pageBottomControl as Control
    >> Dim LogonControl as Control
    >> Dim skinArray as ArrayList = Application("SkinArray")
    >>
    >> pageTop = "PageTop.ascx"
    >> navigateTop = "NavigateTop.ascx"
    >> pageBottom = "PageBottom.ascx"
    >>
    >> pageTopControl = LoadControl(pageTop)
    >> thePlaceHolder.Controls.Add(pageTopControl)
    >> navigateTopControl = LoadControl(navigateTop)
    >> thePlaceHolder.Controls.Add(navigateTopControl)
    >> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >> thePlaceHolder.Controls.Add(LogonControl)
    >> pageBottomControl = LoadControl(pageBottom)
    >> thePlaceHolder.Controls.Add(pageBottomControl)
    >> end Sub
    >> </script>
    >>
    >> <html>
    >> <head>
    >> <title>:: Staffing Workshop ::</title>
    >> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    >> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >> marginheight="0" runat="server">
    >> <form id="addForm" runat="server">
    >>
    >> <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    >>
    >> </form>
    >> </body>
    >> </html>
    >> ******************************************
    >>
    >> The other way is to just build the whole page and have that page as a
    >> control and have it just load the content section as a control
    >> (DisplayCompanyJobs.ascx in my example).
    >>
    >> Not sure if I would be saving a lot here as I am still loading a couple
    >> of pages.
    >>
    >> Thanks,
    >>
    >> Tom
    >>
    >>
    >>

    >
    >
    tshad, Jul 31, 2007
    #3
  4. Hi Tom,

    I'm still thinking that there is something awry about your architecture.
    Skins are generally much simpler to use than you're describing. In fact,
    depending upon your requirements again, if all you're doing is changing the
    look of the page, this can be done for the most part using a CSS style
    sheet, and dynamic styles. But skins are okay, and come in handy from time
    to time. Still, as I said, the model for using them is simpler than what
    you're describing.

    Controls are dynamic by nature rather than static, so it still seems like
    you've got an extra layer of indirection with the Placeholders. I have found
    that many times in my experience I've stepped back after a number of
    changes, taken a fresh look at the architecture from my new viewpoint
    (having done some of the actual work), and decided to take a fresh approach
    to the issue. One common mistake I've seen, and I can't tell if you're
    actually making this one, is that developers will often take too much
    advantage of the dynamic nature of ASP.Net and make one page or one Control
    do too many things. A simpler, more modular approach is generally easier to
    maintain in the long run. But as I said, that's only a general observation,
    not necessarily applicable to your current situation.

    At any rate, in answer to your question regarding the order of loading of
    the PlaceHolders, yes, they will always appear in the order you place them
    in the Page.

    --
    HTH,

    Kevin Spencer
    Microsoft MVP

    Printing Components, Email Components,
    FTP Client Classes, Enhanced Data Controls, much more.
    DSI PrintManager, Miradyne Component Libraries:
    http://www.miradyne.net

    "tshad" <> wrote in message
    news:...
    > "Kevin Spencer" <> wrote in message
    > news:...
    >> It's kind of hard to advise you without knowing a bit more about your
    >> requirements and design. For example, from your code, I don't see why
    >> you're using all that logic to load the User Controls into the page, when
    >> you could just reference them with tags in the page markup.

    >
    > Each one of the Controls is a different part of the page, mainly html
    > code. The Content control has all the asp.net code with textboxes, labels,
    > datagrids etc.
    >
    > Each control is different for each client and the controls come from
    > different folders depending on the client. This is why the controls are
    > not static. The PageTop control could be "skins\ft\displaypage.ascx" for
    > one client and "skins\jl\displaypage.ascx" for another. I am not showing
    > the whole code to make it simpler for my example. I would normally build
    > the Folders (skins\ft for example) based on a session variable.
    >
    > Originally, I had multiple controls because I was thinking that the Forms
    > tags need to be only around the Content Control (LogonControl ), in my
    > example.
    >
    > Now I find that I can put the Forms tag around all the controls without
    > any problems. So that being the case, I could just set up the 2nd example
    > (thePlaceHolder), which just houses all the controls. Not sure if I am
    > gaining anything here.
    >
    > The last case was just to have the whole page built for each client and on
    > each page are the controls I need (content and navigation mainly) and just
    > access the controls that way.
    >
    > Thanks,
    >
    > Tom
    >>
    >> --
    >> HTH,
    >>
    >> Kevin Spencer
    >> Microsoft MVP
    >>
    >> Printing Components, Email Components,
    >> FTP Client Classes, Enhanced Data Controls, much more.
    >> DSI PrintManager, Miradyne Component Libraries:
    >> http://www.miradyne.net
    >>
    >> "tshad" <> wrote in message
    >> news:...
    >>>I am using asp.net 1.1 and am creating my pages with different looks and
    >>>using controls for each part of the page (top, bottom, navigation etc)
    >>>
    >>> The way I have it set up is the following where I have 4 different
    >>> controls (one for each page part). I am looking at a couple other ways
    >>> of doing this as well and was wondering if there is a drawback to doing
    >>> the others.
    >>>
    >>> *****************************************
    >>> <%@ Page Language="VB" trace="false" debug="true"
    >>> ContentType="text/html"
    >>> ResponseEncoding="iso-8859-1" %>
    >>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>> "http://www.w3.org/TR/html4/loose.dtd">
    >>> <script runat="server">
    >>> Sub Page_Load(sender as Object, e as EventArgs)
    >>> Dim pageTop as String
    >>> Dim navigateTop as String
    >>> Dim pageBottom as String
    >>> Dim pageTopControl as Control
    >>> Dim navigateTopControl as Control
    >>> Dim pageBottomControl as Control
    >>> Dim LogonControl as Control
    >>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>
    >>> pageTop = "PageTop.ascx"
    >>> navigateTop = "NavigateTop.ascx"
    >>> pageBottom = "PageBottom.ascx"
    >>>
    >>> pageTopControl = LoadControl(pageTop)
    >>> PageTopPanel.Controls.Add(pageTopControl)
    >>> navigateTopControl = LoadControl(navigateTop)
    >>> NavigateTopPanel.Controls.Add(navigateTopControl)
    >>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>> LogonPanel.Controls.Add(LogonControl)
    >>> pageBottomControl = LoadControl(pageBottom)
    >>> PageBottomPanel.Controls.Add(pageBottomControl)
    >>> end Sub
    >>> </script>
    >>>
    >>> <html>
    >>> <head>
    >>> <title>:: Staffing Workshop ::</title>
    >>> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    >>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>> marginheight="0" runat="server">
    >>> <form id="addForm" runat="server">
    >>>
    >>> <asp:placeHolder ID="PageTopPanel" runat="server"/>
    >>> <asp:placeHolder ID="NavigateTopPanel" runat="server"/>
    >>> <asp:placeHolder ID="LogonPanel" runat="server"/>
    >>> <asp:placeHolder ID="PageBottomPanel" runat="server"/>
    >>>
    >>> </form>
    >>> </body>
    >>> </html>
    >>> ******************************************
    >>>
    >>> Another way is to have only one Placeholder and load them one by one.
    >>> Not sure if this would have any performance impact or not. I am still
    >>> loading 4 pages. Would the controls always display in the order they
    >>> are loaded into the PlaceHolder?
    >>>
    >>> *****************************************
    >>> <%@ Page Language="VB" trace="false" debug="true"
    >>> ContentType="text/html"
    >>> ResponseEncoding="iso-8859-1" %>
    >>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>> "http://www.w3.org/TR/html4/loose.dtd">
    >>> <script runat="server">
    >>> Sub Page_Load(sender as Object, e as EventArgs)
    >>> Dim pageTop as String
    >>> Dim navigateTop as String
    >>> Dim pageBottom as String
    >>> Dim pageTopControl as Control
    >>> Dim navigateTopControl as Control
    >>> Dim pageBottomControl as Control
    >>> Dim LogonControl as Control
    >>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>
    >>> pageTop = "PageTop.ascx"
    >>> navigateTop = "NavigateTop.ascx"
    >>> pageBottom = "PageBottom.ascx"
    >>>
    >>> pageTopControl = LoadControl(pageTop)
    >>> thePlaceHolder.Controls.Add(pageTopControl)
    >>> navigateTopControl = LoadControl(navigateTop)
    >>> thePlaceHolder.Controls.Add(navigateTopControl)
    >>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>> thePlaceHolder.Controls.Add(LogonControl)
    >>> pageBottomControl = LoadControl(pageBottom)
    >>> thePlaceHolder.Controls.Add(pageBottomControl)
    >>> end Sub
    >>> </script>
    >>>
    >>> <html>
    >>> <head>
    >>> <title>:: Staffing Workshop ::</title>
    >>> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    >>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>> marginheight="0" runat="server">
    >>> <form id="addForm" runat="server">
    >>>
    >>> <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    >>>
    >>> </form>
    >>> </body>
    >>> </html>
    >>> ******************************************
    >>>
    >>> The other way is to just build the whole page and have that page as a
    >>> control and have it just load the content section as a control
    >>> (DisplayCompanyJobs.ascx in my example).
    >>>
    >>> Not sure if I would be saving a lot here as I am still loading a couple
    >>> of pages.
    >>>
    >>> Thanks,
    >>>
    >>> Tom
    >>>
    >>>
    >>>

    >>
    >>

    >
    >
    Kevin Spencer, Jul 31, 2007
    #4
  5. tshad

    tshad Guest

    You're right about the architecture.

    I wrote the original design about a year ago that I never got to. I started
    working with the page and after finding out that I could just move the
    <form> tags to just after the <body> tag without any problems, that solved a
    lot of problems and questions. I was trying to determine the goods and bads
    of various approaches.

    What we are doing is allowing our clients to have their own custom pages
    with an area for our software which includes names, addresses, datagrids of
    date etc. We need our own menus but will need to adjust the look depending
    on the look of the page - controlled by CSS. In most cases, the page will
    have a top, left and bottom page with our content going in the middle-right
    section of the page. I already have it pretty much working (with a couple
    of issues I found during testing the first few pages and posted last night).

    The page looks like:
    ****************************************************************
    <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    ResponseEncoding="iso-8859-1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <script runat="server">
    Sub Page_Load(sender as Object, e as EventArgs)
    Dim thePage as String
    Dim pageControl as Control
    Dim navigation as String
    Dim contentControl as Control
    Dim a as htmlControl
    Dim skinArray as ArrayList = Application("SkinArray")
    for i as integer = 0 to skinArray.Count - 1 step 3
    if skinArray(i) = request("MID") then
    session("CompanyInitials") = skinArray(i+1)
    end if
    Next
    if not session("CompanyInitials") is Nothing then
    thePage = "/skins/" & session("CompanyInitials") & "/" & "MainPage" &
    ".ascx"
    navigation = "NavigateTop" & ".ascx"
    end if
    pageControl = LoadControl(thePage)
    thePlaceHolder.Controls.Add(pageControl)
    contentControl =
    CType(thePlaceHolder.FindControl("_ctl0:Navigation"),Control)
    contentControl.Controls.Add(LoadControl(navigation))
    contentControl = CType(Page.FindControl("_ctl0:Content"),Control)
    contentControl.Controls.Add(LoadControl("/applicant/DisplayCompanyJobs.ascx"))

    end Sub

    </script>
    <html>
    <head>
    <title>:: SW::</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    marginheight="0" runat="server">
    <form id="addForm" runat="server">
    <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    </form>
    </body>
    </html>
    ****************************************************************

    As you can see, I have replaced the 4 controls with 1. This is the whole
    page designed specifically for the client. I put 2 controls on this page
    somewhere. Would be a different place for each (1 for content and 1 for
    navigation menus/links). I then then load the 2 controls into these
    controls.

    The other change I think I am going to make is to take all the asp.net code
    and move it to a control and load that also. That way if I make any changes
    to the code, I only have to make it in one place. I will literally have
    100+ identical pages with only the content control (which would be different
    for each page) being different:

    contentControl = CType(Page.FindControl("_ctl0:Content"),Control)
    contentControl.Controls.Add(LoadControl("/applicant/DisplayCompanyJobs.ascx"))

    If there was a way to do this with one page that would be nice, but I need a
    page for each page being called.

    This seems like it will work pretty well once I solve the problem with the
    asp:HyperLink which doesn't seem to be working correctly, as I mentioned in
    another post. Everything else seems to be working.

    I am sure there are other (and maybe better ways) but this seems pretty
    clean and maintainable.

    Thanks,

    Tom

    "Kevin Spencer" <> wrote in message
    news:...
    > Hi Tom,
    >
    > I'm still thinking that there is something awry about your architecture.
    > Skins are generally much simpler to use than you're describing. In fact,
    > depending upon your requirements again, if all you're doing is changing
    > the look of the page, this can be done for the most part using a CSS style
    > sheet, and dynamic styles. But skins are okay, and come in handy from time
    > to time. Still, as I said, the model for using them is simpler than what
    > you're describing.
    >
    > Controls are dynamic by nature rather than static, so it still seems like
    > you've got an extra layer of indirection with the Placeholders. I have
    > found that many times in my experience I've stepped back after a number of
    > changes, taken a fresh look at the architecture from my new viewpoint
    > (having done some of the actual work), and decided to take a fresh
    > approach to the issue. One common mistake I've seen, and I can't tell if
    > you're actually making this one, is that developers will often take too
    > much advantage of the dynamic nature of ASP.Net and make one page or one
    > Control do too many things. A simpler, more modular approach is generally
    > easier to maintain in the long run. But as I said, that's only a general
    > observation, not necessarily applicable to your current situation.
    >
    > At any rate, in answer to your question regarding the order of loading of
    > the PlaceHolders, yes, they will always appear in the order you place them
    > in the Page.
    >
    > --
    > HTH,
    >
    > Kevin Spencer
    > Microsoft MVP
    >
    > Printing Components, Email Components,
    > FTP Client Classes, Enhanced Data Controls, much more.
    > DSI PrintManager, Miradyne Component Libraries:
    > http://www.miradyne.net
    >
    > "tshad" <> wrote in message
    > news:...
    >> "Kevin Spencer" <> wrote in message
    >> news:...
    >>> It's kind of hard to advise you without knowing a bit more about your
    >>> requirements and design. For example, from your code, I don't see why
    >>> you're using all that logic to load the User Controls into the page,
    >>> when you could just reference them with tags in the page markup.

    >>
    >> Each one of the Controls is a different part of the page, mainly html
    >> code. The Content control has all the asp.net code with textboxes,
    >> labels, datagrids etc.
    >>
    >> Each control is different for each client and the controls come from
    >> different folders depending on the client. This is why the controls are
    >> not static. The PageTop control could be "skins\ft\displaypage.ascx" for
    >> one client and "skins\jl\displaypage.ascx" for another. I am not showing
    >> the whole code to make it simpler for my example. I would normally build
    >> the Folders (skins\ft for example) based on a session variable.
    >>
    >> Originally, I had multiple controls because I was thinking that the Forms
    >> tags need to be only around the Content Control (LogonControl ), in my
    >> example.
    >>
    >> Now I find that I can put the Forms tag around all the controls without
    >> any problems. So that being the case, I could just set up the 2nd
    >> example (thePlaceHolder), which just houses all the controls. Not sure
    >> if I am gaining anything here.
    >>
    >> The last case was just to have the whole page built for each client and
    >> on each page are the controls I need (content and navigation mainly) and
    >> just access the controls that way.
    >>
    >> Thanks,
    >>
    >> Tom
    >>>
    >>> --
    >>> HTH,
    >>>
    >>> Kevin Spencer
    >>> Microsoft MVP
    >>>
    >>> Printing Components, Email Components,
    >>> FTP Client Classes, Enhanced Data Controls, much more.
    >>> DSI PrintManager, Miradyne Component Libraries:
    >>> http://www.miradyne.net
    >>>
    >>> "tshad" <> wrote in message
    >>> news:...
    >>>>I am using asp.net 1.1 and am creating my pages with different looks and
    >>>>using controls for each part of the page (top, bottom, navigation etc)
    >>>>
    >>>> The way I have it set up is the following where I have 4 different
    >>>> controls (one for each page part). I am looking at a couple other ways
    >>>> of doing this as well and was wondering if there is a drawback to doing
    >>>> the others.
    >>>>
    >>>> *****************************************
    >>>> <%@ Page Language="VB" trace="false" debug="true"
    >>>> ContentType="text/html"
    >>>> ResponseEncoding="iso-8859-1" %>
    >>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>>> "http://www.w3.org/TR/html4/loose.dtd">
    >>>> <script runat="server">
    >>>> Sub Page_Load(sender as Object, e as EventArgs)
    >>>> Dim pageTop as String
    >>>> Dim navigateTop as String
    >>>> Dim pageBottom as String
    >>>> Dim pageTopControl as Control
    >>>> Dim navigateTopControl as Control
    >>>> Dim pageBottomControl as Control
    >>>> Dim LogonControl as Control
    >>>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>>
    >>>> pageTop = "PageTop.ascx"
    >>>> navigateTop = "NavigateTop.ascx"
    >>>> pageBottom = "PageBottom.ascx"
    >>>>
    >>>> pageTopControl = LoadControl(pageTop)
    >>>> PageTopPanel.Controls.Add(pageTopControl)
    >>>> navigateTopControl = LoadControl(navigateTop)
    >>>> NavigateTopPanel.Controls.Add(navigateTopControl)
    >>>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>>> LogonPanel.Controls.Add(LogonControl)
    >>>> pageBottomControl = LoadControl(pageBottom)
    >>>> PageBottomPanel.Controls.Add(pageBottomControl)
    >>>> end Sub
    >>>> </script>
    >>>>
    >>>> <html>
    >>>> <head>
    >>>> <title>:: Staffing Workshop ::</title>
    >>>> <meta http-equiv="Content-Type" content="text/html;
    >>>> charset=iso-8859-1">
    >>>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>>> marginheight="0" runat="server">
    >>>> <form id="addForm" runat="server">
    >>>>
    >>>> <asp:placeHolder ID="PageTopPanel" runat="server"/>
    >>>> <asp:placeHolder ID="NavigateTopPanel" runat="server"/>
    >>>> <asp:placeHolder ID="LogonPanel" runat="server"/>
    >>>> <asp:placeHolder ID="PageBottomPanel" runat="server"/>
    >>>>
    >>>> </form>
    >>>> </body>
    >>>> </html>
    >>>> ******************************************
    >>>>
    >>>> Another way is to have only one Placeholder and load them one by one.
    >>>> Not sure if this would have any performance impact or not. I am still
    >>>> loading 4 pages. Would the controls always display in the order they
    >>>> are loaded into the PlaceHolder?
    >>>>
    >>>> *****************************************
    >>>> <%@ Page Language="VB" trace="false" debug="true"
    >>>> ContentType="text/html"
    >>>> ResponseEncoding="iso-8859-1" %>
    >>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>>> "http://www.w3.org/TR/html4/loose.dtd">
    >>>> <script runat="server">
    >>>> Sub Page_Load(sender as Object, e as EventArgs)
    >>>> Dim pageTop as String
    >>>> Dim navigateTop as String
    >>>> Dim pageBottom as String
    >>>> Dim pageTopControl as Control
    >>>> Dim navigateTopControl as Control
    >>>> Dim pageBottomControl as Control
    >>>> Dim LogonControl as Control
    >>>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>>
    >>>> pageTop = "PageTop.ascx"
    >>>> navigateTop = "NavigateTop.ascx"
    >>>> pageBottom = "PageBottom.ascx"
    >>>>
    >>>> pageTopControl = LoadControl(pageTop)
    >>>> thePlaceHolder.Controls.Add(pageTopControl)
    >>>> navigateTopControl = LoadControl(navigateTop)
    >>>> thePlaceHolder.Controls.Add(navigateTopControl)
    >>>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>>> thePlaceHolder.Controls.Add(LogonControl)
    >>>> pageBottomControl = LoadControl(pageBottom)
    >>>> thePlaceHolder.Controls.Add(pageBottomControl)
    >>>> end Sub
    >>>> </script>
    >>>>
    >>>> <html>
    >>>> <head>
    >>>> <title>:: Staffing Workshop ::</title>
    >>>> <meta http-equiv="Content-Type" content="text/html;
    >>>> charset=iso-8859-1">
    >>>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>>> marginheight="0" runat="server">
    >>>> <form id="addForm" runat="server">
    >>>>
    >>>> <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    >>>>
    >>>> </form>
    >>>> </body>
    >>>> </html>
    >>>> ******************************************
    >>>>
    >>>> The other way is to just build the whole page and have that page as a
    >>>> control and have it just load the content section as a control
    >>>> (DisplayCompanyJobs.ascx in my example).
    >>>>
    >>>> Not sure if I would be saving a lot here as I am still loading a couple
    >>>> of pages.
    >>>>
    >>>> Thanks,
    >>>>
    >>>> Tom
    >>>>
    >>>>
    >>>>
    >>>
    >>>

    >>
    >>

    >
    >
    tshad, Jul 31, 2007
    #5
  6. Hi Tom,

    I can certainly see how you've arrived at the point you're at now. It is
    often necessary to create something before one is able to create the best
    possible thing, usually due to time constraints or conditions.

    I have done a similar type of project myself, and it does include
    PlaceHolders in various places in case of a need for special customization
    by a particular client, although it is a more generic type of solution,
    which doesn't include any content other than the client's content.

    In my own experience, I used a combination of several different design ideas
    and technologies. I used a basic HTML layout similar to that of
    CSSZenGarden.com, which is highly flexible using an external style sheet,
    but describes a layout "framework," if you will. I substituted ASP.Net
    Panels for most of the divs, allowing me to dynamically change the content,
    and a MasterPage for the overall layout. The MasterPage exposes the various
    Controls it contains as properties which can be accessed by any page being
    hosted in the MasterPage. The actual content of the pages comes from a
    database, which includes Membership and Role Provider data in addition to
    content data. Individual Panels can have different CSS classes assigned to
    them if necessary, and the Style Sheet can be replaced completely for
    different clients, so that the entire layout is more or less dynamic.

    Various parts of the MasterPage can be hidden or displayed on a Page-by-Page
    basis, and as I mentioned, many of the Panels in the MasterPage include
    PlaceHolders for special cases.

    Even now I can think of ways I might be able to improve the design, but I
    too have to work within constraints. For example, I could store the actual
    external Style Sheet in the database, and retrieve it with a special HTTP
    Handler. Perhaps I'll be able to implement some of these in the future. I
    don't know which of these options you may have already thought of, but those
    are a few ideas you may want to think about for the future.

    --
    HTH,

    Kevin Spencer
    Microsoft MVP

    Printing Components, Email Components,
    FTP Client Classes, Enhanced Data Controls, much more.
    DSI PrintManager, Miradyne Component Libraries:
    http://www.miradyne.net

    "tshad" <> wrote in message
    news:...
    > You're right about the architecture.
    >
    > I wrote the original design about a year ago that I never got to. I
    > started working with the page and after finding out that I could just move
    > the <form> tags to just after the <body> tag without any problems, that
    > solved a lot of problems and questions. I was trying to determine the
    > goods and bads of various approaches.
    >
    > What we are doing is allowing our clients to have their own custom pages
    > with an area for our software which includes names, addresses, datagrids
    > of date etc. We need our own menus but will need to adjust the look
    > depending on the look of the page - controlled by CSS. In most cases, the
    > page will have a top, left and bottom page with our content going in the
    > middle-right section of the page. I already have it pretty much working
    > (with a couple of issues I found during testing the first few pages and
    > posted last night).
    >
    > The page looks like:
    > ****************************************************************
    > <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    > ResponseEncoding="iso-8859-1" %>
    > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    > "http://www.w3.org/TR/html4/loose.dtd">
    > <script runat="server">
    > Sub Page_Load(sender as Object, e as EventArgs)
    > Dim thePage as String
    > Dim pageControl as Control
    > Dim navigation as String
    > Dim contentControl as Control
    > Dim a as htmlControl
    > Dim skinArray as ArrayList = Application("SkinArray")
    > for i as integer = 0 to skinArray.Count - 1 step 3
    > if skinArray(i) = request("MID") then
    > session("CompanyInitials") = skinArray(i+1)
    > end if
    > Next
    > if not session("CompanyInitials") is Nothing then
    > thePage = "/skins/" & session("CompanyInitials") & "/" & "MainPage" &
    > ".ascx"
    > navigation = "NavigateTop" & ".ascx"
    > end if
    > pageControl = LoadControl(thePage)
    > thePlaceHolder.Controls.Add(pageControl)
    > contentControl =
    > CType(thePlaceHolder.FindControl("_ctl0:Navigation"),Control)
    > contentControl.Controls.Add(LoadControl(navigation))
    > contentControl = CType(Page.FindControl("_ctl0:Content"),Control)
    >
    > contentControl.Controls.Add(LoadControl("/applicant/DisplayCompanyJobs.ascx"))
    >
    > end Sub
    >
    > </script>
    > <html>
    > <head>
    > <title>:: SW::</title>
    > <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    > </head>
    > <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    > marginheight="0" runat="server">
    > <form id="addForm" runat="server">
    > <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    > </form>
    > </body>
    > </html>
    > ****************************************************************
    >
    > As you can see, I have replaced the 4 controls with 1. This is the whole
    > page designed specifically for the client. I put 2 controls on this page
    > somewhere. Would be a different place for each (1 for content and 1 for
    > navigation menus/links). I then then load the 2 controls into these
    > controls.
    >
    > The other change I think I am going to make is to take all the asp.net
    > code and move it to a control and load that also. That way if I make any
    > changes to the code, I only have to make it in one place. I will
    > literally have 100+ identical pages with only the content control (which
    > would be different for each page) being different:
    >
    > contentControl = CType(Page.FindControl("_ctl0:Content"),Control)
    >
    > contentControl.Controls.Add(LoadControl("/applicant/DisplayCompanyJobs.ascx"))
    >
    > If there was a way to do this with one page that would be nice, but I need
    > a page for each page being called.
    >
    > This seems like it will work pretty well once I solve the problem with the
    > asp:HyperLink which doesn't seem to be working correctly, as I mentioned
    > in another post. Everything else seems to be working.
    >
    > I am sure there are other (and maybe better ways) but this seems pretty
    > clean and maintainable.
    >
    > Thanks,
    >
    > Tom
    >
    > "Kevin Spencer" <> wrote in message
    > news:...
    >> Hi Tom,
    >>
    >> I'm still thinking that there is something awry about your architecture.
    >> Skins are generally much simpler to use than you're describing. In fact,
    >> depending upon your requirements again, if all you're doing is changing
    >> the look of the page, this can be done for the most part using a CSS
    >> style sheet, and dynamic styles. But skins are okay, and come in handy
    >> from time to time. Still, as I said, the model for using them is simpler
    >> than what you're describing.
    >>
    >> Controls are dynamic by nature rather than static, so it still seems like
    >> you've got an extra layer of indirection with the Placeholders. I have
    >> found that many times in my experience I've stepped back after a number
    >> of changes, taken a fresh look at the architecture from my new viewpoint
    >> (having done some of the actual work), and decided to take a fresh
    >> approach to the issue. One common mistake I've seen, and I can't tell if
    >> you're actually making this one, is that developers will often take too
    >> much advantage of the dynamic nature of ASP.Net and make one page or one
    >> Control do too many things. A simpler, more modular approach is generally
    >> easier to maintain in the long run. But as I said, that's only a general
    >> observation, not necessarily applicable to your current situation.
    >>
    >> At any rate, in answer to your question regarding the order of loading of
    >> the PlaceHolders, yes, they will always appear in the order you place
    >> them in the Page.
    >>
    >> --
    >> HTH,
    >>
    >> Kevin Spencer
    >> Microsoft MVP
    >>
    >> Printing Components, Email Components,
    >> FTP Client Classes, Enhanced Data Controls, much more.
    >> DSI PrintManager, Miradyne Component Libraries:
    >> http://www.miradyne.net
    >>
    >> "tshad" <> wrote in message
    >> news:...
    >>> "Kevin Spencer" <> wrote in message
    >>> news:...
    >>>> It's kind of hard to advise you without knowing a bit more about your
    >>>> requirements and design. For example, from your code, I don't see why
    >>>> you're using all that logic to load the User Controls into the page,
    >>>> when you could just reference them with tags in the page markup.
    >>>
    >>> Each one of the Controls is a different part of the page, mainly html
    >>> code. The Content control has all the asp.net code with textboxes,
    >>> labels, datagrids etc.
    >>>
    >>> Each control is different for each client and the controls come from
    >>> different folders depending on the client. This is why the controls are
    >>> not static. The PageTop control could be "skins\ft\displaypage.ascx"
    >>> for one client and "skins\jl\displaypage.ascx" for another. I am not
    >>> showing the whole code to make it simpler for my example. I would
    >>> normally build the Folders (skins\ft for example) based on a session
    >>> variable.
    >>>
    >>> Originally, I had multiple controls because I was thinking that the
    >>> Forms tags need to be only around the Content Control (LogonControl ),
    >>> in my example.
    >>>
    >>> Now I find that I can put the Forms tag around all the controls without
    >>> any problems. So that being the case, I could just set up the 2nd
    >>> example (thePlaceHolder), which just houses all the controls. Not sure
    >>> if I am gaining anything here.
    >>>
    >>> The last case was just to have the whole page built for each client and
    >>> on each page are the controls I need (content and navigation mainly) and
    >>> just access the controls that way.
    >>>
    >>> Thanks,
    >>>
    >>> Tom
    >>>>
    >>>> --
    >>>> HTH,
    >>>>
    >>>> Kevin Spencer
    >>>> Microsoft MVP
    >>>>
    >>>> Printing Components, Email Components,
    >>>> FTP Client Classes, Enhanced Data Controls, much more.
    >>>> DSI PrintManager, Miradyne Component Libraries:
    >>>> http://www.miradyne.net
    >>>>
    >>>> "tshad" <> wrote in message
    >>>> news:...
    >>>>>I am using asp.net 1.1 and am creating my pages with different looks
    >>>>>and using controls for each part of the page (top, bottom, navigation
    >>>>>etc)
    >>>>>
    >>>>> The way I have it set up is the following where I have 4 different
    >>>>> controls (one for each page part). I am looking at a couple other
    >>>>> ways of doing this as well and was wondering if there is a drawback to
    >>>>> doing the others.
    >>>>>
    >>>>> *****************************************
    >>>>> <%@ Page Language="VB" trace="false" debug="true"
    >>>>> ContentType="text/html"
    >>>>> ResponseEncoding="iso-8859-1" %>
    >>>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>>>> "http://www.w3.org/TR/html4/loose.dtd">
    >>>>> <script runat="server">
    >>>>> Sub Page_Load(sender as Object, e as EventArgs)
    >>>>> Dim pageTop as String
    >>>>> Dim navigateTop as String
    >>>>> Dim pageBottom as String
    >>>>> Dim pageTopControl as Control
    >>>>> Dim navigateTopControl as Control
    >>>>> Dim pageBottomControl as Control
    >>>>> Dim LogonControl as Control
    >>>>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>>>
    >>>>> pageTop = "PageTop.ascx"
    >>>>> navigateTop = "NavigateTop.ascx"
    >>>>> pageBottom = "PageBottom.ascx"
    >>>>>
    >>>>> pageTopControl = LoadControl(pageTop)
    >>>>> PageTopPanel.Controls.Add(pageTopControl)
    >>>>> navigateTopControl = LoadControl(navigateTop)
    >>>>> NavigateTopPanel.Controls.Add(navigateTopControl)
    >>>>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>>>> LogonPanel.Controls.Add(LogonControl)
    >>>>> pageBottomControl = LoadControl(pageBottom)
    >>>>> PageBottomPanel.Controls.Add(pageBottomControl)
    >>>>> end Sub
    >>>>> </script>
    >>>>>
    >>>>> <html>
    >>>>> <head>
    >>>>> <title>:: Staffing Workshop ::</title>
    >>>>> <meta http-equiv="Content-Type" content="text/html;
    >>>>> charset=iso-8859-1">
    >>>>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>>>> marginheight="0" runat="server">
    >>>>> <form id="addForm" runat="server">
    >>>>>
    >>>>> <asp:placeHolder ID="PageTopPanel" runat="server"/>
    >>>>> <asp:placeHolder ID="NavigateTopPanel" runat="server"/>
    >>>>> <asp:placeHolder ID="LogonPanel" runat="server"/>
    >>>>> <asp:placeHolder ID="PageBottomPanel" runat="server"/>
    >>>>>
    >>>>> </form>
    >>>>> </body>
    >>>>> </html>
    >>>>> ******************************************
    >>>>>
    >>>>> Another way is to have only one Placeholder and load them one by one.
    >>>>> Not sure if this would have any performance impact or not. I am still
    >>>>> loading 4 pages. Would the controls always display in the order they
    >>>>> are loaded into the PlaceHolder?
    >>>>>
    >>>>> *****************************************
    >>>>> <%@ Page Language="VB" trace="false" debug="true"
    >>>>> ContentType="text/html"
    >>>>> ResponseEncoding="iso-8859-1" %>
    >>>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>>>> "http://www.w3.org/TR/html4/loose.dtd">
    >>>>> <script runat="server">
    >>>>> Sub Page_Load(sender as Object, e as EventArgs)
    >>>>> Dim pageTop as String
    >>>>> Dim navigateTop as String
    >>>>> Dim pageBottom as String
    >>>>> Dim pageTopControl as Control
    >>>>> Dim navigateTopControl as Control
    >>>>> Dim pageBottomControl as Control
    >>>>> Dim LogonControl as Control
    >>>>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>>>
    >>>>> pageTop = "PageTop.ascx"
    >>>>> navigateTop = "NavigateTop.ascx"
    >>>>> pageBottom = "PageBottom.ascx"
    >>>>>
    >>>>> pageTopControl = LoadControl(pageTop)
    >>>>> thePlaceHolder.Controls.Add(pageTopControl)
    >>>>> navigateTopControl = LoadControl(navigateTop)
    >>>>> thePlaceHolder.Controls.Add(navigateTopControl)
    >>>>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>>>> thePlaceHolder.Controls.Add(LogonControl)
    >>>>> pageBottomControl = LoadControl(pageBottom)
    >>>>> thePlaceHolder.Controls.Add(pageBottomControl)
    >>>>> end Sub
    >>>>> </script>
    >>>>>
    >>>>> <html>
    >>>>> <head>
    >>>>> <title>:: Staffing Workshop ::</title>
    >>>>> <meta http-equiv="Content-Type" content="text/html;
    >>>>> charset=iso-8859-1">
    >>>>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>>>> marginheight="0" runat="server">
    >>>>> <form id="addForm" runat="server">
    >>>>>
    >>>>> <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    >>>>>
    >>>>> </form>
    >>>>> </body>
    >>>>> </html>
    >>>>> ******************************************
    >>>>>
    >>>>> The other way is to just build the whole page and have that page as a
    >>>>> control and have it just load the content section as a control
    >>>>> (DisplayCompanyJobs.ascx in my example).
    >>>>>
    >>>>> Not sure if I would be saving a lot here as I am still loading a
    >>>>> couple of pages.
    >>>>>
    >>>>> Thanks,
    >>>>>
    >>>>> Tom
    >>>>>
    >>>>>
    >>>>>
    >>>>
    >>>>
    >>>
    >>>

    >>
    >>

    >
    >
    Kevin Spencer, Aug 1, 2007
    #6
  7. tshad

    tshad Guest

    Sounds good and will keep them in mind.

    I do similar things where I will keep my generic email page in my database
    instead of a file on the disk.

    Thanks,

    Tom

    "Kevin Spencer" <> wrote in message
    news:%...
    > Hi Tom,
    >
    > I can certainly see how you've arrived at the point you're at now. It is
    > often necessary to create something before one is able to create the best
    > possible thing, usually due to time constraints or conditions.
    >
    > I have done a similar type of project myself, and it does include
    > PlaceHolders in various places in case of a need for special customization
    > by a particular client, although it is a more generic type of solution,
    > which doesn't include any content other than the client's content.
    >
    > In my own experience, I used a combination of several different design
    > ideas and technologies. I used a basic HTML layout similar to that of
    > CSSZenGarden.com, which is highly flexible using an external style sheet,
    > but describes a layout "framework," if you will. I substituted ASP.Net
    > Panels for most of the divs, allowing me to dynamically change the
    > content, and a MasterPage for the overall layout. The MasterPage exposes
    > the various Controls it contains as properties which can be accessed by
    > any page being hosted in the MasterPage. The actual content of the pages
    > comes from a database, which includes Membership and Role Provider data in
    > addition to content data. Individual Panels can have different CSS classes
    > assigned to them if necessary, and the Style Sheet can be replaced
    > completely for different clients, so that the entire layout is more or
    > less dynamic.
    >
    > Various parts of the MasterPage can be hidden or displayed on a
    > Page-by-Page basis, and as I mentioned, many of the Panels in the
    > MasterPage include PlaceHolders for special cases.
    >
    > Even now I can think of ways I might be able to improve the design, but I
    > too have to work within constraints. For example, I could store the actual
    > external Style Sheet in the database, and retrieve it with a special HTTP
    > Handler. Perhaps I'll be able to implement some of these in the future. I
    > don't know which of these options you may have already thought of, but
    > those are a few ideas you may want to think about for the future.
    >
    > --
    > HTH,
    >
    > Kevin Spencer
    > Microsoft MVP
    >
    > Printing Components, Email Components,
    > FTP Client Classes, Enhanced Data Controls, much more.
    > DSI PrintManager, Miradyne Component Libraries:
    > http://www.miradyne.net
    >
    > "tshad" <> wrote in message
    > news:...
    >> You're right about the architecture.
    >>
    >> I wrote the original design about a year ago that I never got to. I
    >> started working with the page and after finding out that I could just
    >> move the <form> tags to just after the <body> tag without any problems,
    >> that solved a lot of problems and questions. I was trying to determine
    >> the goods and bads of various approaches.
    >>
    >> What we are doing is allowing our clients to have their own custom pages
    >> with an area for our software which includes names, addresses, datagrids
    >> of date etc. We need our own menus but will need to adjust the look
    >> depending on the look of the page - controlled by CSS. In most cases,
    >> the page will have a top, left and bottom page with our content going in
    >> the middle-right section of the page. I already have it pretty much
    >> working (with a couple of issues I found during testing the first few
    >> pages and posted last night).
    >>
    >> The page looks like:
    >> ****************************************************************
    >> <%@ Page Language="VB" trace="false" debug="true" ContentType="text/html"
    >> ResponseEncoding="iso-8859-1" %>
    >> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >> "http://www.w3.org/TR/html4/loose.dtd">
    >> <script runat="server">
    >> Sub Page_Load(sender as Object, e as EventArgs)
    >> Dim thePage as String
    >> Dim pageControl as Control
    >> Dim navigation as String
    >> Dim contentControl as Control
    >> Dim a as htmlControl
    >> Dim skinArray as ArrayList = Application("SkinArray")
    >> for i as integer = 0 to skinArray.Count - 1 step 3
    >> if skinArray(i) = request("MID") then
    >> session("CompanyInitials") = skinArray(i+1)
    >> end if
    >> Next
    >> if not session("CompanyInitials") is Nothing then
    >> thePage = "/skins/" & session("CompanyInitials") & "/" & "MainPage" &
    >> ".ascx"
    >> navigation = "NavigateTop" & ".ascx"
    >> end if
    >> pageControl = LoadControl(thePage)
    >> thePlaceHolder.Controls.Add(pageControl)
    >> contentControl =
    >> CType(thePlaceHolder.FindControl("_ctl0:Navigation"),Control)
    >> contentControl.Controls.Add(LoadControl(navigation))
    >> contentControl = CType(Page.FindControl("_ctl0:Content"),Control)
    >>
    >> contentControl.Controls.Add(LoadControl("/applicant/DisplayCompanyJobs.ascx"))
    >>
    >> end Sub
    >>
    >> </script>
    >> <html>
    >> <head>
    >> <title>:: SW::</title>
    >> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    >> </head>
    >> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >> marginheight="0" runat="server">
    >> <form id="addForm" runat="server">
    >> <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    >> </form>
    >> </body>
    >> </html>
    >> ****************************************************************
    >>
    >> As you can see, I have replaced the 4 controls with 1. This is the whole
    >> page designed specifically for the client. I put 2 controls on this page
    >> somewhere. Would be a different place for each (1 for content and 1 for
    >> navigation menus/links). I then then load the 2 controls into these
    >> controls.
    >>
    >> The other change I think I am going to make is to take all the asp.net
    >> code and move it to a control and load that also. That way if I make any
    >> changes to the code, I only have to make it in one place. I will
    >> literally have 100+ identical pages with only the content control (which
    >> would be different for each page) being different:
    >>
    >> contentControl = CType(Page.FindControl("_ctl0:Content"),Control)
    >>
    >> contentControl.Controls.Add(LoadControl("/applicant/DisplayCompanyJobs.ascx"))
    >>
    >> If there was a way to do this with one page that would be nice, but I
    >> need a page for each page being called.
    >>
    >> This seems like it will work pretty well once I solve the problem with
    >> the asp:HyperLink which doesn't seem to be working correctly, as I
    >> mentioned in another post. Everything else seems to be working.
    >>
    >> I am sure there are other (and maybe better ways) but this seems pretty
    >> clean and maintainable.
    >>
    >> Thanks,
    >>
    >> Tom
    >>
    >> "Kevin Spencer" <> wrote in message
    >> news:...
    >>> Hi Tom,
    >>>
    >>> I'm still thinking that there is something awry about your architecture.
    >>> Skins are generally much simpler to use than you're describing. In fact,
    >>> depending upon your requirements again, if all you're doing is changing
    >>> the look of the page, this can be done for the most part using a CSS
    >>> style sheet, and dynamic styles. But skins are okay, and come in handy
    >>> from time to time. Still, as I said, the model for using them is simpler
    >>> than what you're describing.
    >>>
    >>> Controls are dynamic by nature rather than static, so it still seems
    >>> like you've got an extra layer of indirection with the Placeholders. I
    >>> have found that many times in my experience I've stepped back after a
    >>> number of changes, taken a fresh look at the architecture from my new
    >>> viewpoint (having done some of the actual work), and decided to take a
    >>> fresh approach to the issue. One common mistake I've seen, and I can't
    >>> tell if you're actually making this one, is that developers will often
    >>> take too much advantage of the dynamic nature of ASP.Net and make one
    >>> page or one Control do too many things. A simpler, more modular approach
    >>> is generally easier to maintain in the long run. But as I said, that's
    >>> only a general observation, not necessarily applicable to your current
    >>> situation.
    >>>
    >>> At any rate, in answer to your question regarding the order of loading
    >>> of the PlaceHolders, yes, they will always appear in the order you place
    >>> them in the Page.
    >>>
    >>> --
    >>> HTH,
    >>>
    >>> Kevin Spencer
    >>> Microsoft MVP
    >>>
    >>> Printing Components, Email Components,
    >>> FTP Client Classes, Enhanced Data Controls, much more.
    >>> DSI PrintManager, Miradyne Component Libraries:
    >>> http://www.miradyne.net
    >>>
    >>> "tshad" <> wrote in message
    >>> news:...
    >>>> "Kevin Spencer" <> wrote in message
    >>>> news:...
    >>>>> It's kind of hard to advise you without knowing a bit more about your
    >>>>> requirements and design. For example, from your code, I don't see why
    >>>>> you're using all that logic to load the User Controls into the page,
    >>>>> when you could just reference them with tags in the page markup.
    >>>>
    >>>> Each one of the Controls is a different part of the page, mainly html
    >>>> code. The Content control has all the asp.net code with textboxes,
    >>>> labels, datagrids etc.
    >>>>
    >>>> Each control is different for each client and the controls come from
    >>>> different folders depending on the client. This is why the controls
    >>>> are not static. The PageTop control could be
    >>>> "skins\ft\displaypage.ascx" for one client and
    >>>> "skins\jl\displaypage.ascx" for another. I am not showing the whole
    >>>> code to make it simpler for my example. I would normally build the
    >>>> Folders (skins\ft for example) based on a session variable.
    >>>>
    >>>> Originally, I had multiple controls because I was thinking that the
    >>>> Forms tags need to be only around the Content Control (LogonControl ),
    >>>> in my example.
    >>>>
    >>>> Now I find that I can put the Forms tag around all the controls without
    >>>> any problems. So that being the case, I could just set up the 2nd
    >>>> example (thePlaceHolder), which just houses all the controls. Not sure
    >>>> if I am gaining anything here.
    >>>>
    >>>> The last case was just to have the whole page built for each client and
    >>>> on each page are the controls I need (content and navigation mainly)
    >>>> and just access the controls that way.
    >>>>
    >>>> Thanks,
    >>>>
    >>>> Tom
    >>>>>
    >>>>> --
    >>>>> HTH,
    >>>>>
    >>>>> Kevin Spencer
    >>>>> Microsoft MVP
    >>>>>
    >>>>> Printing Components, Email Components,
    >>>>> FTP Client Classes, Enhanced Data Controls, much more.
    >>>>> DSI PrintManager, Miradyne Component Libraries:
    >>>>> http://www.miradyne.net
    >>>>>
    >>>>> "tshad" <> wrote in message
    >>>>> news:...
    >>>>>>I am using asp.net 1.1 and am creating my pages with different looks
    >>>>>>and using controls for each part of the page (top, bottom, navigation
    >>>>>>etc)
    >>>>>>
    >>>>>> The way I have it set up is the following where I have 4 different
    >>>>>> controls (one for each page part). I am looking at a couple other
    >>>>>> ways of doing this as well and was wondering if there is a drawback
    >>>>>> to doing the others.
    >>>>>>
    >>>>>> *****************************************
    >>>>>> <%@ Page Language="VB" trace="false" debug="true"
    >>>>>> ContentType="text/html"
    >>>>>> ResponseEncoding="iso-8859-1" %>
    >>>>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>>>>> "http://www.w3.org/TR/html4/loose.dtd">
    >>>>>> <script runat="server">
    >>>>>> Sub Page_Load(sender as Object, e as EventArgs)
    >>>>>> Dim pageTop as String
    >>>>>> Dim navigateTop as String
    >>>>>> Dim pageBottom as String
    >>>>>> Dim pageTopControl as Control
    >>>>>> Dim navigateTopControl as Control
    >>>>>> Dim pageBottomControl as Control
    >>>>>> Dim LogonControl as Control
    >>>>>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>>>>
    >>>>>> pageTop = "PageTop.ascx"
    >>>>>> navigateTop = "NavigateTop.ascx"
    >>>>>> pageBottom = "PageBottom.ascx"
    >>>>>>
    >>>>>> pageTopControl = LoadControl(pageTop)
    >>>>>> PageTopPanel.Controls.Add(pageTopControl)
    >>>>>> navigateTopControl = LoadControl(navigateTop)
    >>>>>> NavigateTopPanel.Controls.Add(navigateTopControl)
    >>>>>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>>>>> LogonPanel.Controls.Add(LogonControl)
    >>>>>> pageBottomControl = LoadControl(pageBottom)
    >>>>>> PageBottomPanel.Controls.Add(pageBottomControl)
    >>>>>> end Sub
    >>>>>> </script>
    >>>>>>
    >>>>>> <html>
    >>>>>> <head>
    >>>>>> <title>:: Staffing Workshop ::</title>
    >>>>>> <meta http-equiv="Content-Type" content="text/html;
    >>>>>> charset=iso-8859-1">
    >>>>>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>>>>> marginheight="0" runat="server">
    >>>>>> <form id="addForm" runat="server">
    >>>>>>
    >>>>>> <asp:placeHolder ID="PageTopPanel" runat="server"/>
    >>>>>> <asp:placeHolder ID="NavigateTopPanel" runat="server"/>
    >>>>>> <asp:placeHolder ID="LogonPanel" runat="server"/>
    >>>>>> <asp:placeHolder ID="PageBottomPanel" runat="server"/>
    >>>>>>
    >>>>>> </form>
    >>>>>> </body>
    >>>>>> </html>
    >>>>>> ******************************************
    >>>>>>
    >>>>>> Another way is to have only one Placeholder and load them one by one.
    >>>>>> Not sure if this would have any performance impact or not. I am
    >>>>>> still loading 4 pages. Would the controls always display in the
    >>>>>> order they are loaded into the PlaceHolder?
    >>>>>>
    >>>>>> *****************************************
    >>>>>> <%@ Page Language="VB" trace="false" debug="true"
    >>>>>> ContentType="text/html"
    >>>>>> ResponseEncoding="iso-8859-1" %>
    >>>>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >>>>>> "http://www.w3.org/TR/html4/loose.dtd">
    >>>>>> <script runat="server">
    >>>>>> Sub Page_Load(sender as Object, e as EventArgs)
    >>>>>> Dim pageTop as String
    >>>>>> Dim navigateTop as String
    >>>>>> Dim pageBottom as String
    >>>>>> Dim pageTopControl as Control
    >>>>>> Dim navigateTopControl as Control
    >>>>>> Dim pageBottomControl as Control
    >>>>>> Dim LogonControl as Control
    >>>>>> Dim skinArray as ArrayList = Application("SkinArray")
    >>>>>>
    >>>>>> pageTop = "PageTop.ascx"
    >>>>>> navigateTop = "NavigateTop.ascx"
    >>>>>> pageBottom = "PageBottom.ascx"
    >>>>>>
    >>>>>> pageTopControl = LoadControl(pageTop)
    >>>>>> thePlaceHolder.Controls.Add(pageTopControl)
    >>>>>> navigateTopControl = LoadControl(navigateTop)
    >>>>>> thePlaceHolder.Controls.Add(navigateTopControl)
    >>>>>> LogonControl = LoadControl("DisplayCompanyJobs.ascx")
    >>>>>> thePlaceHolder.Controls.Add(LogonControl)
    >>>>>> pageBottomControl = LoadControl(pageBottom)
    >>>>>> thePlaceHolder.Controls.Add(pageBottomControl)
    >>>>>> end Sub
    >>>>>> </script>
    >>>>>>
    >>>>>> <html>
    >>>>>> <head>
    >>>>>> <title>:: Staffing Workshop ::</title>
    >>>>>> <meta http-equiv="Content-Type" content="text/html;
    >>>>>> charset=iso-8859-1">
    >>>>>> <body id="myBody" leftmargin="0" topmargin="0" marginwidth="0"
    >>>>>> marginheight="0" runat="server">
    >>>>>> <form id="addForm" runat="server">
    >>>>>>
    >>>>>> <asp:placeHolder ID="thePlaceHolder" runat="server"/>
    >>>>>>
    >>>>>> </form>
    >>>>>> </body>
    >>>>>> </html>
    >>>>>> ******************************************
    >>>>>>
    >>>>>> The other way is to just build the whole page and have that page as a
    >>>>>> control and have it just load the content section as a control
    >>>>>> (DisplayCompanyJobs.ascx in my example).
    >>>>>>
    >>>>>> Not sure if I would be saving a lot here as I am still loading a
    >>>>>> couple of pages.
    >>>>>>
    >>>>>> Thanks,
    >>>>>>
    >>>>>> Tom
    >>>>>>
    >>>>>>
    >>>>>>
    >>>>>
    >>>>>
    >>>>
    >>>>
    >>>
    >>>

    >>
    >>

    >
    >
    tshad, Aug 1, 2007
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. buran
    Replies:
    1
    Views:
    408
    Bruno Sirianni
    Apr 6, 2004
  2. Josh
    Replies:
    1
    Views:
    9,525
    Jeffrey Palermo [MCP]
    May 26, 2004
  3. Sinisa Ruzin
    Replies:
    0
    Views:
    856
    Sinisa Ruzin
    Oct 7, 2004
  4. cyndie woodster via DotNetMonster.com

    web user controls and placeholders

    cyndie woodster via DotNetMonster.com, Mar 2, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    338
    Guest
    Mar 2, 2005
  5. Josh
    Replies:
    1
    Views:
    192
Loading...

Share This Page