Re: Template data is not being replaced in a Templated ASP.NET server control...

Mike Andrews <[email protected]>
Newsgroups gmane.comp.windows.devel.dotnet.web
Message-ID <[email protected]>
Adam,

I decided to go ahead and call the DataBind() method in the Render method.
This particular control doesn't provide any functionality at all for binding
to a datasource of any kind.  It's a wrapper for an ActiveX control and for
several modes of viewing; I render the control completely myself based on
properties.  I'm also building lots of dynamic javascript and use the
__doPostBack method for using the IPostBackEventHandler interface.  The
templates are to let the UI programmer to customize the interface but keep
the previously built Javascript methods working.

Thanks,
Mike

On 3/30/07, Adam Sills <[email protected]> wrote:
>
> I wouldn't recommend doing that, even though it works. I would personally
> recommend anytime you use databinding syntax you force the page owner to
> call your DataBind method (or just Page.DataBind).
>
> If you are insistent on doing automatic data binding, you can override
> OnInit or OnLoad (provided they're not doing anything else) and then call
> DataBind from there.
>
> Adam..
>
> -----Original Message-----
> From: Discussion of building .NET applications targeted for the Web
> [mailto:[email protected]] On Behalf Of Mike Andrews
> Sent: Friday, March 30, 2007 3:25 PM
> To: [email protected]
> Subject: Re: [DOTNET-WEB] Template data is not being replaced in a
> Templated
> ASP.NET server control...
>
> Adam,
>
> I've figured something else out now.
> Due to the complex nature of this particular control I've had to call
> DataBind() within the control itself.
> If I call DataBind() in the Render() method, then I don't need to call in
> on
> the page.
> Also, I implemented the IPostBackEventHandler method for the control and
> called DataBind() in it as well.
> The control does work now with the complex behavior and works as expected.
>
> Thanks again for your help,
> Mike
>
>
>
> On 3/30/07, Adam Sills <[email protected]> wrote:
> >
> > Did you forget to put runat="server" on the control?
> >
> > -----Original Message-----
> > From: Discussion of building .NET applications targeted for the Web
> > [mailto:[email protected]] On Behalf Of Mike Andrews
> > Sent: Friday, March 30, 2007 1:26 PM
> > To: [email protected]
> > Subject: Re: [DOTNET-WEB] Template data is not being replaced in a
> > Templated
> > ASP.NET server control...
> >
> > I have yet another question regarding this...
> >
> > I'm almost working now...
> > However, when I put an asp control inside of the template, the markup is
> > sending the asp:xxx control out to the page instead of the rendered
> html.
> > Any suggestions?
> >
> > Thanks,
> > Mike
> >
> >
> >
> > On 3/30/07, Adam Sills <[email protected]> wrote:
> > >
> > > Yes.
> > >
> > > But like I also said, I had to add a call to DataBind() in my
> codebehind
> > > page.
> > >
> > > Here's all the code, works great.
> > >
> > > <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="
> > Default.aspx.cs"
> > > Inherits="WebApplication1._Default" %>
> > > <%@ Register Assembly="WebApplication1" Namespace="WebApplication1"
> > > TagPrefix="cc1" %>
> > > <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1"
> > > runat="server">
> > >    <title>Untitled Page</title>
> > > </head>
> > > <body>
> > >    <form id="form1" runat="server">
> > >    <div>
> > >                <cc1:ScannerControl id="ScannerControl1_1"
> > runat="server">
> > >                        <Template>
> > >                                <h1><%# Container.Text %></h1>
> > >                        </Template>
> > >                </cc1:ScannerControl>
> > >        </div>
> > >    </form>
> > > </body>
> > > </html>
> > >
> > > namespace WebApplication1 {
> > >        public partial class _Default : System.Web.UI.Page {
> > >                protected void Page_Load( object sender, EventArgs e )
> {
> > >                        this.ScannerControl1_1.DataBind();
> > >                }
> > >        }
> > > }
> > >
> > > namespace WebApplication1 {
> > >        public class MyContainer : Control, INamingContainer {
> > >                public MyContainer( string text ) {
> > >                        this.Text = text;
> > >                }
> > >
> > >                private string _text;
> > >                public string Text {
> > >                        get { return _text; }
> > >                        set { _text = value; }
> > >                }
> > >        }
> > >
> > > }
> > >
> > > namespace WebApplication1 {
> > >        [ToolboxData( "<{0}:ScannerControl
> > > runat=server></{0}:ScannerControl>" )]
> > >        public class ScannerControl : CompositeControl {
> > >                private ITemplate _template;
> > >
> > >                [TemplateContainer( typeof( MyContainer ) )]
> > >                [PersistenceMode( PersistenceMode.InnerProperty )]
> > >                public ITemplate Template {
> > >                        get { return _template; }
> > >                        set { _template = value; }
> > >                }
> > >
> > >                public override void DataBind() {
> > >                        base.DataBind();
> > >                }
> > >
> > >                protected override void CreateChildControls() {
> > >                        this.Controls.Clear();
> > >                        if( this.Template != null ) {
> > >                                MyContainer mc = new MyContainer( "The
> > > default container text!" );
> > >                                this.Controls.Add( mc );
> > >                                this.Template.InstantiateIn( mc );
> > >                        }
> > >                        base.CreateChildControls();
> > >                }
> > >        }
> > > }
> > >
> > > And with this, here's the output:
> > >
> > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> > > http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> > > <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1"><title>
> > >        Untitled Page
> > > </title></head>
> > > <body>
> > >    <form name="form1" method="post" action="Default.aspx" id="form1">
> > > <div>
> > > <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
> > >
> > >
> >
> >
>
> value="/wEPDwULLTE4NzY2NjU3OTEPZBYCAgMPZBYCAgEPZBYCZg9kFgJmDxUBG1RoZSBkZWZhd
> > > Wx0IGNvbnRhaW5lciB0ZXh0IWRkSSdc9mE3KlCrYB94vl7I3Cok4f8=" />
> > > </div>
> > >
> > >    <div>
> > >                <span id="ScannerControl1_1">
> > >                                <h1>The default container text!</h1>
> > >                        </span>
> > >        </div>
> > >    </form>
> > > </body>
> > > </html>
> > >
> > > -----Original Message-----
> > > From: Discussion of building .NET applications targeted for the Web
> > > [mailto:[email protected]] On Behalf Of Mike Andrews
> > > Sent: Friday, March 30, 2007 9:45 AM
> > > To: [email protected]
> > > Subject: Re: [DOTNET-WEB] Template data is not being replaced in a
> > > Templated
> > > ASP.NET server control...
> > >
> > > Adam,
> > >
> > > Thank you for your replies.
> > >
> > > However, I cannot get any of your examples to work.  I still the get
> > same
> > > effect as before.
> > > One of the things I specifically tried was the <%# Container.GetType
> > > ().Name
> > > %> and it worked as before.
> > > It's replaced with nothing instead of the name of the object.
> > >
> > > Were you able to get them to work in your environment?
> > >
> > > Thanks,
> > > Mike
> > >
> > >
> > > On 3/29/07, Adam Sills <[email protected]> wrote:
> > > >
> > > > Your code modified. Note all I've done is change what's in the <%#
> %>
> > > > block
> > > > and make ScannerControl inherit from CompositeControl.
> > > >
> > > > .aspx:
> > > >
> > > > <cc1:ScannerControl id="ScannerControl1_1" runat="server">
> > > >    <Template>
> > > >        <h1><%# Container.GetType().Name %></h1>
> > > >    </Template>
> > > > </cc1:ScannerControl>
> > > >
> > > > Scanner control:
> > > >
> > > > [ToolboxData( "<{0}:ScannerControl
> runat=server></{0}:ScannerControl>"
> > > )]
> > > > public class ScannerControl : CompositeControl {
> > > >        private ITemplate _template;
> > > >
> > > >        [TemplateContainer( typeof( MyContainer ) )]
> > > >        [PersistenceMode( PersistenceMode.InnerProperty )]
> > > >        public ITemplate Template {
> > > >                get { return _template; }
> > > >                set { _template = value; }
> > > >        }
> > > >
> > > >        protected override void CreateChildControls() {
> > > >                this.Controls.Clear();
> > > >                if( this.Template != null ) {
> > > >                        MyContainer mc = new MyContainer( "The
> default
> > > > container text!" );
> > > >                        this.Controls.Add( mc );
> > > >                        this.Template.InstantiateIn( mc );
> > > >                }
> > > >                base.CreateChildControls();
> > > >        }
> > > > }
> > > >
> > > > -----Original Message-----
> > > > From: Discussion of building .NET applications targeted for the Web
> > > > [mailto:[email protected]] On Behalf Of Mike Andrews
> > > > Sent: Thursday, March 29, 2007 4:06 PM
> > > > To: [email protected]
> > > > Subject: Re: [DOTNET-WEB] Template data is not being replaced in a
> > > > Templated
> > > > ASP.NET server control...
> > > >
> > > > Thanks for the response Adam.
> > > >
> > > > Would you be able to provide an example?
> > > > I'm not sure what you mean about the DataBind on the scanner
> control.
> > > >
> > > > Thanks,
> > > > Mike
> > > >
> > > >
> > > > On 3/29/07, Adam Sills <[email protected]> wrote:
> > > > >
> > > > > You have two problems.
> > > > >
> > > > > 1. You're not calling DataBind on your scanner control
> > > > > 2. WebControl by itself does not loop through its child controls
> and
> > > > call
> > > > > DataBind on them in its DataBind call. You need to do that
> yourself
> > or
> > > > > inherit from CompositeControl instead.
> > > > >
> > > > > Adam..
> > > > >
> > > > > -----Original Message-----
> > > > > From: Discussion of building .NET applications targeted for the
> Web
> > > > > [mailto:[email protected]] On Behalf Of Mike Andrews
> > > > > Sent: Thursday, March 29, 2007 3:47 PM
> > > > > To: [email protected]
> > > > > Subject: [DOTNET-WEB] Template data is not being replaced in a
> > > Templated
> > > > > ASP.NET server control...
> > > > >
> > > > > Guys,
> > > > >
> > > > > I'm really lost now.  I cannot, I repeat cannot, get the data in
> my
> > > > > container control that represents the template to work.
> > > > > If you notice in my markup, I have this: <%# Container.Text%
> >.  When
> > > > the
> > > > > template control is created (MyContainer) and I call the
> > Instantiate,
> > > > this
> > > > > value is not replaced with the message "The default container
> text!"
> > > as
> > > > it
> > > > > should have been, but instead is replaced with nothing.
> > > > >
> > > > > Any help would be most appreciated.  I'm really at my wits end
> with
> > > this
> > > > > one.
> > > > >
> > > > > Thanks,
> > > > > Mike
> > > > >
> > > > > Here's my asp.net markup:
> > > > >
> > > > > <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="
> > > Default.aspx.cs
> > > > "
> > > > > Inherits="_Default" %>
> > > > > <%@ Register Assembly="Scanner" Namespace="Scanner"
> TagPrefix="cc1"
> > %>
> > > > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> > > > > http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> > > > > <html xmlns="http://www.w3.org/1999/xhtml" >
> > > > > <head runat="server">
> > > > >    <title>Untitled Page</title>
> > > > > </head>
> > > > > <body>
> > > > >    <form id="form1" runat="server">
> > > > >    <div>
> > > > >        <cc1:ScannerControl id="ScannerControl1_1" runat="server">
> > > > >            <Template>
> > > > >                <h1><%# Container.Text %></h1>
> > > > >            </Template>
> > > > >        </cc1:ScannerControl>
> > > > > </div>
> > > > >    </form>
> > > > > </body>
> > > > > </html>
> > > > >
> > > > >
> > > > > Here's the result of the page when it's run:
> > > > >
> > > > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> > > > > http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> > > > > <html xmlns="http://www.w3.org/1999/xhtml" >
> > > > > <head><title>
> > > > > Untitled Page
> > > > > </title></head>
> > > > > <body>
> > > > >    <form name="form1" method="post" action="Default.aspx"
> > id="form1">
> > > > > <div>
> > > > > <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
> > > > > value="/wEPDwUJNTgwMjcwMjU1ZGTpLl3HHZKhrXybhi5mD/cUEBCBwQ==" />
> > > > > </div>
> > > > >    <div>
> > > > >        <span id="ScannerControl1_1">
> > > > >                <h1></h1>
> > > > >            </span>
> > > > > </div>
> > > > >    </form>
> > > > > </body>
> > > > > </html>
> > > > >
> > > > >
> > > > > Here is a really scaled down version of my code:
> > > > >
> > > > >
> > > > >    [ToolboxData("<{0}:ScannerControl
> > > > runat=server></{0}:ScannerControl>")]
> > > > >    public class ScannerControl : WebControl {
> > > > >        private ITemplate _template;
> > > > >        [TemplateContainer(typeof(MyContainer))]
> > > > >        [PersistenceMode(PersistenceMode.InnerProperty)]
> > > > >        public ITemplate Template {
> > > > >            get { return _template; }
> > > > >            set { _template = value; }
> > > > >        }
> > > > >
> > > > >        protected override void CreateChildControls() {
> > > > >            this.Controls.Clear();
> > > > >            if (this.Template != null) {
> > > > >                MyContainer mc = new MyContainer("The default
> > container
> > > > > text!");
> > > > >                this.Template.InstantiateIn(mc);
> > > > >                this.Controls.Add(mc);
> > > > >            }
> > > > >            base.CreateChildControls();
> > > > >        }
> > > > >    }
> > > > >
> > > > >    public class MyContainer : Control, INamingContainer {
> > > > >        public MyContainer(string text) {
> > > > >            this.Text = text;
> > > > >        }
> > > > >
> > > > >        private string _text;
> > > > >        public string Text {
> > > > >            get { return _text; }
> > > > >            set { _text = value; }
> > > > >        }
> > > > >    }
> > > > >
> > > > > ===================================
> > > > > This list is hosted by DevelopMentorR  http://www.develop.com
> > > > >
> > > > > View archives and manage your subscription(s) at
> > > > > http://discuss.develop.com
> > > > >
> > > > > ===================================
> > > > > This list is hosted by DevelopMentor(r)  http://www.develop.com
> > > > >
> > > > > View archives and manage your subscription(s) at
> > > > > http://discuss.develop.com
> > > > >
> > > >
> > > > ===================================
> > > > This list is hosted by DevelopMentorR  http://www.develop.com
> > > >
> > > > View archives and manage your subscription(s) at
> > > > http://discuss.develop.com
> > > >
> > > > ===================================
> > > > This list is hosted by DevelopMentor(r)  http://www.develop.com
> > > >
> > > > View archives and manage your subscription(s) at
> > > > http://discuss.develop.com
> > > >
> > >
> > > ===================================
> > > This list is hosted by DevelopMentorR  http://www.develop.com
> > >
> > > View archives and manage your subscription(s) at
> > > http://discuss.develop.com
> > >
> > > ===================================
> > > This list is hosted by DevelopMentor(r)  http://www.develop.com
> > >
> > > View archives and manage your subscription(s) at
> > > http://discuss.develop.com
> > >
> >
> > ===================================
> > This list is hosted by DevelopMentorR  http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
> > ===================================
> > This list is hosted by DevelopMentor(r)  http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.