The cast is invalid because ASP.net returns a control collection. If you use
Button button = ctl.Controls[0] as Button;
you'll get a valid button. ParseControl can accept a string that defines
more then one control, so it needs to return a ControlCollection.
Erick
----- Original Message -----
From: "Kirk Allen Evans" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, September 17, 2002 12:14 PM
Subject: Re: [ADVANCED-DOTNET] Controls, .Net and Xslt insanity
> Frustrating, I can't think offhand why the cast is invalid either. A
> quick workaround is to specify the property of the control when it is
> being parsed instead of trying to cast to set the property as an object:
>
> System.Web.UI.Control myForm = Page.FindControl("WebForm1");
>
> System.Web.UI.Control ctl = Page.ParseControl("<asp:Button
> runat=\"server\" id=\"test\" text=\"Hello, World!\"/>");
>
> myForm.Controls.Add(ctl);
>
>
> Kirk Allen Evans
> http://www.xmlandasp.net
> Author, "XML And ASP.NET", New Riders Publishing
> http://www.amazon.com/exec/obidos/ASIN/073571200X
>
> > -----Original Message-----
> > From: Moderated discussion of advanced .NET topics. [mailto:ADVANCED-
> > [EMAIL PROTECTED]] On Behalf Of Steven Livingstone
> > Sent: Tuesday, September 17, 2002 1:59 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [ADVANCED-DOTNET] Controls, .Net and Xslt insanity
> >
> > Ok, what is wrong with this example from the SDK? Invalid Cast
> exception
> > at the line marked ***. Do you have a working example or a pointer to
> > one :)
> >
> > <%@ Page language="c#" %>
> > <html>
> > <head>
> > <script language="C#" runat="server">
> > void Page_Load(object sender, System.EventArgs
> > e)
> > {
> > Button myButton =
> > (Button)ParseControl("<asp:button runat = \"server\"/>"); //***
> > myButton.Text = "Hello World!";
> > Controls.Add(myButton);
> > }
> >
> > private void button_OnClick(object sender,
> > System.EventArgs e)
> > {
> > }
> > </script>
> > </head>
> > </html>
> >
> > -----Original Message-----
> > From: Moderated discussion of advanced .NET topics.
> > [mailto:[EMAIL PROTECTED]] On Behalf Of Kirk Allen
> > Evans
> > Sent: 17 September 2002 18:51
> > To: [EMAIL PROTECTED]
> > Subject: Re: [ADVANCED-DOTNET] Controls, .Net and Xslt insanity
> >
> >
> > No, it is a string. Retrieve your output from the transformation as a
> > string, and parsecontrol can load that string in. The example in the
> > SDK is actually a good representation of how to do it, since it is
> > simple. The key is to get the XSLT out as a string so that it can be
> > loaded into Page.ParseControl.
> >
> > Remember to either have a form element declared in the .ASPX page and
> > add controls to it, or dynamically add it and use Page.Controls.Add
> > method to add the form and its child controls.
> >
> > Kirk Allen Evans
> > http://www.xmlandasp.net
> > Author, "XML And ASP.NET", New Riders Publishing
> > http://www.amazon.com/exec/obidos/ASIN/073571200X
> >
> > > -----Original Message-----
> > > From: Moderated discussion of advanced .NET topics.
> [mailto:ADVANCED-
> > > [EMAIL PROTECTED]] On Behalf Of Steven Livingstone
> > > Sent: Tuesday, September 17, 2002 1:28 PM
> > > To: [EMAIL PROTECTED]
> > > Subject: Re: [ADVANCED-DOTNET] Controls, .Net and Xslt insanity
> > >
> > > Hi Kirk -
> > > Yep - that is exactly the way I want to do it. Any good examples of
> > > working with the ParseControl? The MSDN ones fail with a cast
> > exception.
> > > The LoadControl() would be cool if it took a MemoryStream - but it
> > > doesn't :(
> > >
> > > I think that if Xslt was better integrated with the IDE we could
> have
> > > pretty powerful server controls. I've stayed away from server
> > > controls, but now I am finding the fun in trying to work with them
> > > with the Xslt knowledge I have.
> > >
> > > Thanks,
> > > Steven
> > >
> > > -----Original Message-----
> > > From: Moderated discussion of advanced .NET topics.
> > > [mailto:[EMAIL PROTECTED]] On Behalf Of Kirk Allen
> > > Evans
> > > Sent: 17 September 2002 18:01
> > > To: [EMAIL PROTECTED]
> > > Subject: Re: [ADVANCED-DOTNET] Controls, .Net and Xslt insanity
> > >
> > >
> > > One way to do this is to use the Page.ParseControl and Controls.Add
> > > methods to load the controls that are dynamically created. The
> > downside
> > > to the approach is that the web forms controls are prefixed with
> > "asp:",
> > > but the page has no namespace declaration associated with the
> > namespace
> > > prefix "asp". So, you have to fake one in your XSLT, then remove it
> > so
> > > that Page.ParseControl doesn't throw an exception. So, you have to
> > > implement some sort of a post-processor on your XSLT result as a
> > string
> > > to remove the xmlns declaration for the dummy namespace bound to the
> > asp
> > > prefix, but leaving the asp prefix on all nodes. Or, you can output
> > > elements as HTML with an additional "runat='server'" attribute and
> > pass
> > > them into the Page.ParseControl method, enabling them to become HTML
> > > server controls. Performance takes a hit, but I couldn't pinpoint
> any
> >
> > > huge glaring performance issues with small test sets.
> > >
> > > Personally, I prefer a mixed approach, using XML to load into
> DataSets
> >
> > > that are bound to UI elements as well as to use XSLT for limited
> > display
> > > areas instead of entire pages.
> > >
> > > Kirk Allen Evans
> > > http://www.xmlandasp.net
> > > Author, "XML And ASP.NET", New Riders Publishing
> > > http://www.amazon.com/exec/obidos/ASIN/073571200X
> > >
> > > > -----Original Message-----
> > > > From: Moderated discussion of advanced .NET topics.
> > [mailto:ADVANCED-
> > > > [EMAIL PROTECTED]] On Behalf Of Steven Livingstone
> > > > Sent: Tuesday, September 17, 2002 12:02 PM
> > > > To: [EMAIL PROTECTED]
> > > > Subject: [ADVANCED-DOTNET] Controls, .Net and Xslt insanity
> > > >
> > > > Ok, even after taking time out again to think about this issue I
> > feel
> > > I
> > > > need some view and opinions.
> > > > Creating web controls in .Net - when and how?
> > > >
> > > > For years now I have almost without exception used Xslt to
> generate
> > > the
> > > > output for forms and content alike. Now, with web controls there
> is
> > > the
> > > > mixed content and code, some of which I don't like all that much.
> To
> >
> > > > generate a menu for example, I would be more tempted to write the
> > code
> > >
> > > > to use Xslt to transform the data. The idea of writing out table
> > > > elements in C# code with javascript inserted as strings is not at
> > all
> > > > appealing.
> > > >
> > > > When it comes to forms, it is more appealing as you can get state
> > > > management and validation - both of which are a pain to manage in
> > > Xslt.
> > > > Still you have the annoying need to write out table elements and
> > form
> > > > elements (e.g. output.Write("<td class='clsMenuBarCell'
> nowrap>");)
> > > >
> > > > I have hit one of those mind block days where I am arguing with
> > myself
> > >
> > > > over the better way to do things, so it's out to the jury to let
> me
> > > know
> > > > what you have been doing.
> > > > I'm pretty sure the best way is some combination - this would
> > ideally
> > > be
> > > > a way of still getting state management and validation, with OO,
> but
> >
> > > > being able to separate the display from the Asp.Net, but this
> > doesn't
> > > > seem possible.
> > > >
> > > > I also dislike the idea of transforming to an aspx page and then
> > > loading
> > > > that.
> > > >
> > > > Has anyone looked at in memory dynamic compilation? In other
> words,
> > > > still having your xslt's that can be loaded. These transform to an
> > > aspx
> > > > output in memory that is dynamically returned so that you can
> still
> > > get
> > > > all the benefits of state management and validation methods? An
> > > example
> > > > may be:
> > > >
> > > > - user vists page
> > > > - aspx page generates form using Xml data and Xslt to create aspx
> > code
> > > > - user submits data
> > > > - aspx code behind validates and maintains viewstate
> > > > - in memory aspx output section is modified by code-behind (e.g.
> > > > label.Text="Invalid Telephone Number")
> > > > - result is sent to the output
> > > >
> > > > Thanks,
> > > > Steven.
> > > >
> > > >
> > > > ==========================================================
> > > > Steven Livingstone BSc (hons), PgDip ITS
> > > [[EMAIL PROTECTED]]
> > > > .Net & Xml Consultant
> > > >
> > > > Change your business at http://www.deltabis.net
> > > > Grow your business at http://www.venturetogether.com
> > > > Change European Football at http://www.theatlanticleague.com
> > > >
> > > > *** Author of "Application Development with MSXML 4.0"
> > > > *** Coming Soon to a developer near you...
> > > > "Beg VB.NET XML:Essential XML Skills for VB.NET Programmers" "Beg
> C#
> >
> > > > XML:Essential XML Skills for C# Programmers"
> > > > ==========================================================
> > > >
> > > > You can read messages from the Advanced DOTNET archive,
> unsubscribe
> > > from
> > > > Advanced DOTNET, or
> > > > subscribe to other DevelopMentor lists at
> > http://discuss.develop.com.
> > >
> > > You can read messages from the Advanced DOTNET archive, unsubscribe
> > from
> > > Advanced DOTNET, or subscribe to other DevelopMentor lists at
> > > http://discuss.develop.com.
> > >
> > > You can read messages from the Advanced DOTNET archive, unsubscribe
> > from
> > > Advanced DOTNET, or
> > > subscribe to other DevelopMentor lists at
> http://discuss.develop.com.
> >
> > You can read messages from the Advanced DOTNET archive, unsubscribe
> from
> > Advanced DOTNET, or subscribe to other DevelopMentor lists at
> > http://discuss.develop.com.
> >
> > You can read messages from the Advanced DOTNET archive, unsubscribe
> from
> > Advanced DOTNET, or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
>
> You can read messages from the Advanced DOTNET archive, unsubscribe from
Advanced DOTNET, or
> subscribe to other DevelopMentor lists at http://discuss.develop.com.
You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced
DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.