|
code
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Custom Templated Control not rendering asp.net controls correctlythe code below, everything works fine and it generates the correct id and the asp.net button calls serverside click event as it should: _myTemplateContainer = New ContentContainer(Me) ContentTemplate.InstantiateIn(_myTemplateContainer) Controls.Add(_myTemplateContainer) But if I use this code, it does not generate the unique ID and no serverside event will be called: Dim SB As New StringBuilder() Dim SW As New StringWriter(SB) Dim htmlTW As New HtmlTextWriter(SW) _myTemplateContainer = New ContentContainer(Me) ContentTemplate.InstantiateIn(_myTemplateContainer) _myTemplateContainer.RenderControl(htmlTW) If Not Me.Page.IsClientScriptBlockRegistered("MainWindow_" & Me.ID) Then Me.Page.RegisterClientScriptBlock("MainWindow_" & Me.ID, SB.ToString) End If The reason I was trying to do it this way is because I need the html of the template and some other html table code to be output to the top of the html page no matter where the actual custom control is sited and this was the only way I could figure out how to do that. Do you happen to know either of these answers: 1. Is there something else I need to do to get RenderControl to generate proper ID's for asp.net control that exist on the template I am trying to render or is that just not possible. 2. Is there another way I can make sure the output of the template always appears at the top of the page html? Hi,
on the second code block, you don't add the template container to the Controls collection, that's the key part in when Page generates IDs for controls or when events are handled (for postback events, control would need to be in Controls collection at Page_Load at the latest) -- Show quoteHide quoteTeemu Keiski ASP.NET MVP, AspInsider Finland, EU "news.microsoft.com" <kirk.quin***@zywave.com> wrote in message news:uFUUYeGPFHA.3076@tk2msftngp13.phx.gbl... > If I have an ASP.net button inside a template for a custom control and use > the code below, everything works fine and it generates the correct id and > the asp.net button calls serverside click event as it should: > > _myTemplateContainer = New ContentContainer(Me) > ContentTemplate.InstantiateIn(_myTemplateContainer) > Controls.Add(_myTemplateContainer) > > But if I use this code, it does not generate the unique ID and no > serverside event will be called: > > > Dim SB As New StringBuilder() > Dim SW As New StringWriter(SB) > Dim htmlTW As New HtmlTextWriter(SW) > _myTemplateContainer = New ContentContainer(Me) > ContentTemplate.InstantiateIn(_myTemplateContainer) > _myTemplateContainer.RenderControl(htmlTW) > > If Not Me.Page.IsClientScriptBlockRegistered("MainWindow_" & Me.ID) Then > Me.Page.RegisterClientScriptBlock("MainWindow_" & Me.ID, SB.ToString) > End If > > The reason I was trying to do it this way is because I need the html of > the template and some other html table code to be output to the top of the > html page no matter where the actual custom control is sited and this was > the only way I could figure out how to do that. > > Do you happen to know either of these answers: > > 1. Is there something else I need to do to get RenderControl to generate > proper ID's for asp.net control that exist on the template I am trying to > render or is that just not possible. > 2. Is there another way I can make sure the output of the template always > appears at the top of the page html? > >
Get Value of a control from my Own Control
Dynamically resize a DropDownList in a grid when dropped down How to call javascript when click update command(it Edit command c ASP datagrid not passing text to Excel Call Page from Control Parser Error Urgent User COntrol Looking for sorted list webcontrol the process cannot access the file because it is being used by another process set dropdownlist value in datalist |
|||||||||||||||||||||||