server side include or user control?

Discussion in 'ASP .Net' started by Mark, May 10, 2005.

  1. Mark

    Mark Guest

    I am setting up an asp.net site using the Ektron CMS. Every page in the
    site uses the same basic template, with the look of the page changing
    via CSS and an id on the body. The id is shared by all pages in a
    subsection, e.g. everything in /about/ needs to have <body id="about">.

    In the past what I've done is set a global variable in index.asp, then
    include the template to render the page:

    <%
    pageid = "about"
    defaultcontentid = 33
    %>
    <!--#include virtual="/include/mastertemplate.asp" -->

    mastertemplate.asp would be the entire page, echoing and processing the
    variables like so:

    <!--#include virtual="/include/cmsfunctions.asp" -->
    <body id="<%= pageid %>">
    <%= cmsRenderContent(defaultcontentid) %>

    This worked great. I needed one index.asp for each subsection, and had
    no duplication of template code. If the template needed to be updated, I
    just gave it to the designer, who modified it in Dreamweaver or
    whatever. The separation between presentation and logic was good, and
    any code that generated html was in an easily-modified function.

    I've experimented with a similar approach in asp.net, and have the start
    of it working, but the additional complication is that
    mastertemplate.aspx has some codebehind related to the cms server
    controls that it uses, and I need to use the passed-in variables within
    that codebehind. For example, I'd establish a default content id in the
    calling page, and if the mastertemplate.asp doesn't detect an id in the
    url, it will use the default.

    I am looking for examples of this approach in asp.net but I keep running
    across advice to use user controls instead. But it seems like user
    controls are used for parts of pages, not the page template itself. Is
    that right? Can a user control contain server controls? How would I pass
    variables from a "stub" calling page to the user control page? Can a
    user control be modified in something like Dreamweaver?

    Thanks,

    --
    mark
     
    Mark, May 10, 2005
    #1
    1. Advertising

  2. Mark

    TJS Guest

    generally they are right.

    You will typically put a "place holder" into the template and then replace
    that "place holder" with content created from a control (.ascx file). the
    content is injected into the position of the "place holder" by using the
    page.loadcontrol method.

    example:
    ------------------------
    ....somewhere in your code

    ' Dynamically inject a signin login module into the page
    '---------------------------------------------------------------------
    If Request.IsAuthenticated = False Then
    LoginControl.Controls.Add(Page.LoadControl("~/SignIn.ascx"))
    End If

    ..... somewhere in your template

    <asp:placeholder id="LoginControl" runat="server" />


    "Mark" <> wrote in message
    news:...
    >I am setting up an asp.net site using the Ektron CMS. Every page in the
    > site uses the same basic template, with the look of the page changing
    > via CSS and an id on the body. The id is shared by all pages in a
    > subsection, e.g. everything in /about/ needs to have <body id="about">.
    >
    > In the past what I've done is set a global variable in index.asp, then
    > include the template to render the page:
    >
    > <%
    > pageid = "about"
    > defaultcontentid = 33
    > %>
    > <!--#include virtual="/include/mastertemplate.asp" -->
    >
    > mastertemplate.asp would be the entire page, echoing and processing the
    > variables like so:
    >
    > <!--#include virtual="/include/cmsfunctions.asp" -->
    > <body id="<%= pageid %>">
    > <%= cmsRenderContent(defaultcontentid) %>
    >
    > This worked great. I needed one index.asp for each subsection, and had
    > no duplication of template code. If the template needed to be updated, I
    > just gave it to the designer, who modified it in Dreamweaver or
    > whatever. The separation between presentation and logic was good, and
    > any code that generated html was in an easily-modified function.
    >
    > I've experimented with a similar approach in asp.net, and have the start
    > of it working, but the additional complication is that
    > mastertemplate.aspx has some codebehind related to the cms server
    > controls that it uses, and I need to use the passed-in variables within
    > that codebehind. For example, I'd establish a default content id in the
    > calling page, and if the mastertemplate.asp doesn't detect an id in the
    > url, it will use the default.
    >
    > I am looking for examples of this approach in asp.net but I keep running
    > across advice to use user controls instead. But it seems like user
    > controls are used for parts of pages, not the page template itself. Is
    > that right? Can a user control contain server controls? How would I pass
    > variables from a "stub" calling page to the user control page? Can a
    > user control be modified in something like Dreamweaver?
    >
    > Thanks,
    >
    > --
    > mark
     
    TJS, May 10, 2005
    #2
    1. Advertising

  3. Include files are old fashioned.
    User controls are a better approach. Yes, they can contain any kind of
    controls you'd like. You can create public properties, methods, and events
    to facilitate communication between the user control and the page.
    I agree with you that user controls do not fully achieve the "template"
    functionality you seek as gracefully as we'd all like, but the only great
    solution is in ASP.NET 2.0 (due out later this year) which implements
    "Master Pages".

    Here's more info:
    http://SteveOrr.net/faq/usercustom.aspx
    http://www.c-sharpcorner.com/Code/2004/May/MasterPages.asp

    --
    I hope this helps,
    Steve C. Orr, MCSD, MVP
    http://SteveOrr.net



    "Mark" <> wrote in message
    news:...
    >I am setting up an asp.net site using the Ektron CMS. Every page in the
    > site uses the same basic template, with the look of the page changing
    > via CSS and an id on the body. The id is shared by all pages in a
    > subsection, e.g. everything in /about/ needs to have <body id="about">.
    >
    > In the past what I've done is set a global variable in index.asp, then
    > include the template to render the page:
    >
    > <%
    > pageid = "about"
    > defaultcontentid = 33
    > %>
    > <!--#include virtual="/include/mastertemplate.asp" -->
    >
    > mastertemplate.asp would be the entire page, echoing and processing the
    > variables like so:
    >
    > <!--#include virtual="/include/cmsfunctions.asp" -->
    > <body id="<%= pageid %>">
    > <%= cmsRenderContent(defaultcontentid) %>
    >
    > This worked great. I needed one index.asp for each subsection, and had
    > no duplication of template code. If the template needed to be updated, I
    > just gave it to the designer, who modified it in Dreamweaver or
    > whatever. The separation between presentation and logic was good, and
    > any code that generated html was in an easily-modified function.
    >
    > I've experimented with a similar approach in asp.net, and have the start
    > of it working, but the additional complication is that
    > mastertemplate.aspx has some codebehind related to the cms server
    > controls that it uses, and I need to use the passed-in variables within
    > that codebehind. For example, I'd establish a default content id in the
    > calling page, and if the mastertemplate.asp doesn't detect an id in the
    > url, it will use the default.
    >
    > I am looking for examples of this approach in asp.net but I keep running
    > across advice to use user controls instead. But it seems like user
    > controls are used for parts of pages, not the page template itself. Is
    > that right? Can a user control contain server controls? How would I pass
    > variables from a "stub" calling page to the user control page? Can a
    > user control be modified in something like Dreamweaver?
    >
    > Thanks,
    >
    > --
    > mark
     
    Steve C. Orr [MVP, MCSD], May 10, 2005
    #3
  4. Mark

    Mark Guest

    In article <#>,
    "Steve C. Orr [MVP, MCSD]" <> wrote:

    > I agree with you that user controls do not fully achieve the "template"
    > functionality you seek as gracefully as we'd all like, but the only great
    > solution is in ASP.NET 2.0 (due out later this year) which implements
    > "Master Pages".
    >
    > Here's more info:
    > http://SteveOrr.net/faq/usercustom.aspx
    > http://www.c-sharpcorner.com/Code/2004/May/MasterPages.asp


    Yes, Master Pages is most like what I was after. Now I am thinking about
    just passing the section name in the url and have everything run through
    a single page. Instead of

    /about/index.aspx?id=123
    /portfolio/index.aspx?id=456

    I'll go

    /index.aspx?s=about&id=123
    /index.aspx?s=portfolio&id=456

    This should work fine, especially since the cms has url aliasing.

    Thnkas,
     
    Mark, May 10, 2005
    #4
  5. Yes, I've tried that approach before and it's not as easy as it might seem
    at first.
    Since everything is essentially a postback to the same page, this opens up
    new hassles related to dynamically creating controls at runtime and managing
    them all between postbacks and keeping them from conflicting with eachother
    in various ways.
    If you can, skip to ASP.NET 2.0 and use master pages. Otherwise I'd suggest
    you use multiple pages with header and/or footer controls to help manage a
    common look & feel.

    --
    I hope this helps,
    Steve C. Orr, MCSD, MVP
    http://SteveOrr.net


    "Mark" <> wrote in message
    news:...
    > In article <#>,
    > "Steve C. Orr [MVP, MCSD]" <> wrote:
    >
    >> I agree with you that user controls do not fully achieve the "template"
    >> functionality you seek as gracefully as we'd all like, but the only great
    >> solution is in ASP.NET 2.0 (due out later this year) which implements
    >> "Master Pages".
    >>
    >> Here's more info:
    >> http://SteveOrr.net/faq/usercustom.aspx
    >> http://www.c-sharpcorner.com/Code/2004/May/MasterPages.asp

    >
    > Yes, Master Pages is most like what I was after. Now I am thinking about
    > just passing the section name in the url and have everything run through
    > a single page. Instead of
    >
    > /about/index.aspx?id=123
    > /portfolio/index.aspx?id=456
    >
    > I'll go
    >
    > /index.aspx?s=about&id=123
    > /index.aspx?s=portfolio&id=456
    >
    > This should work fine, especially since the cms has url aliasing.
    >
    > Thnkas,
     
    Steve C. Orr [MVP, MCSD], May 11, 2005
    #5
    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. Mythran
    Replies:
    2
    Views:
    525
    Mythran
    Jan 22, 2005
  2. Larry
    Replies:
    3
    Views:
    2,812
    Larry
    Feb 20, 2006
  3. Thor
    Replies:
    1
    Views:
    1,032
    Mikkel Heisterberg
    Jul 2, 2003
  4. Replies:
    2
    Views:
    370
  5. Andreas Bogenberger
    Replies:
    3
    Views:
    961
    Andreas Bogenberger
    Feb 22, 2008
Loading...

Share This Page