[CLOSED] Exception because Control names don't use idmode when rendering UserControlLoader controls from UserControlRenderer

  1. #1

    [CLOSED] Exception because Control names don't use idmode when rendering UserControlLoader controls from UserControlRenderer


    Test43.aspx

    <%@ Page Language="C#" EnableViewState="false" ClassName="Test43"  %>
    <%@ Import Namespace="SceneCalendar.Web" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e) {
        }
        protected void CreateTest( object sender, DirectEventArgs e ) {
            var cfg = new UserControlRendererConfig() {
                UserControlPath = "Test43a.ascx",
                UserControlId = "uc1",
                UserControlClientIDMode = System.Web.UI.ClientIDMode.Predictable,
                Mode = RenderMode.AddTo,
                Items = false,
                Element = RP.ClientID
            };
            UserControlRenderer.Render( cfg );
        }
    </script>
    
    
    <!DOCTYPE html>
    <html>
    <head id="Head1" runat="server">
        <title>Test43 Sample</title>
    </head>
    <body>
        <form id="Form1" runat="server">
    
    
            <ext:ResourceManager ID="ResourceManager1" runat="server" ScriptMode="Development" SourceFormatting="true" />
            <ext:Viewport ID="vp" runat="server" Layout="HBoxLayout">
                <Items>
    
    
                    <ext:Container ID="LP" runat="server" Border="true" Padding="5" Flex="1" Layout="FitLayout">
                        <Items>
                            <ext:Button runat="server" Text="Test Right Panel Load">
                            <DirectEvents>
                                <Click OnEvent="CreateTest" />
                            </DirectEvents>
                            </ext:Button>                                
                            <ext:Hidden ID="ucLoaded" runat="server" Text="0" />
                        </Items>
                    </ext:Container>
    
    
                    <ext:Container ID="RP" runat="server" Flex="1" Layout="VBoxLayout">
                        <Items>
                            <ext:TextField ID="test" runat="server" />
                        </Items>
                    </ext:Container>
    
    
                </Items>
            </ext:Viewport>
        </form>
    </body>
    </html>
    Test43a.ascx
    <%@ Control Language="C#" ClassName="Test43a" %>
    <%@ Import Namespace="SceneCalendar.Web" %>
    <script runat="server">
        protected void Page_Load( object sender, EventArgs e ) {
            Cont.Items.Add( new UserControlLoader() { Path = "Test43b.ascx", IDMode = IDMode.Predictable, ID = "lpuc", UserControlClientIDMode = System.Web.UI.ClientIDMode.Predictable } );
        }
    </script>
    <ext:Container ID="Cont" runat="server" Flex="1">
        <Items>
            <ext:Label ID="Label1" runat="server" Html="Inner" />
        </Items>
    </ext:Container>
    Test43b.ascx
    <%@ Control Language="C#" ClassName="Test43b" %>
    <script runat="server">
        protected void Page_Load( object sender, EventArgs e ) {
            Button1.Text = ClientID.ToString();
        }
    </script>
    <ext:Label ID="Label2" runat="server" Html="Label2" />
    <ext:DatePicker ID="Dates" runat="server" />
    <ext:Button ID="Button1" runat="server"  Text="" />
    Response after clicking Test button
    Ext.net.append(Ext.getBody(),["<div id=\"uc1_ct_Content\" class=\"x-hidden\"><div id=\"App.uc1_Cont_Container\"></div>","</div>"].join(''));Ext.net.ResourceMgr.destroyCmp("App.__Page_uc1_ct");Ext.create("Ext.container.Container",{id:"uc1_Cont",renderTo:"App.uc1_Cont_Container",flex:1,items:[{id:"uc1_Label1",html:"Inner",xtype:"netlabel"},{id:"id836f3eebdb3450a3_Label2",html:"Label2",xtype:"netlabel"},{id:"id836f3eebdb3450a3_Dates",xtype:"datepicker",format:"n/j/Y",longDayFormat:"l, F d, Y"},{id:"id836f3eebdb3450a3_Button1",xtype:"button",text:"uc1_ctl02"}]});App.RP.add({id:"__Page_uc1_ct",xtype:"container",contentEl:"uc1_ct_Content"});App.ctl02_Button1.setText("uc1_ctl02");
    Note 2 issues:
    1. ids for Test43b children do not match idmode requested in UserControlLoader
    2. redundant setText is back in this case.
    Last edited by Daniil; Dec 24, 2013 at 8:31 AM. Reason: [CLOSED]
  2. #2
    Hi @michaeld,

    We are investigating.
  3. #3
    Note 2 issues:
    1. ids for Test43b children do not match idmode requested in UserControlLoader
    2. redundant setText is back in this case.
    1. You need to set UserControlID instead ID in UserControlLoader
    2. Fixed in SVN, thanks for the report

    Now, ContainerConfig is added to UserControlRenderer config.
    protected void CreateTest( object sender, DirectEventArgs e ) {
            var cfg = new UserControlRendererConfig() {
                UserControlPath = "Child.ascx",
                UserControlId = "uc1",
                UserControlClientIDMode = System.Web.UI.ClientIDMode.Predictable,
                Mode = RenderMode.AddTo,
    
    /*Set Legacy to honor UserControlIDMode*/ContainerConfig = new Container.Config {
                    IDMode = IDMode.Legacy
                },
    
                Items = false,
                Element = RP.ClientID
            };
            UserControlRenderer.Render( cfg );
            bool b = ResourceManager.GetInstance().IsDynamic;
        }

Similar Threads

  1. Replies: 2
    Last Post: Dec 19, 2013, 10:54 AM
  2. Replies: 8
    Last Post: Nov 28, 2013, 6:39 AM
  3. Replies: 3
    Last Post: Sep 05, 2013, 8:18 AM
  4. Replies: 6
    Last Post: Dec 07, 2011, 12:55 PM
  5. Replies: 2
    Last Post: Apr 15, 2010, 5:33 AM

Posting Permissions