UserControl... where is the clientID on the client side?

Discussion in 'ASP .Net Building Controls' started by Monty, Jun 21, 2007.

  1. Monty

    Monty Guest

    [ASP.Net 2.0, WAP, Atlas]

    I have a custom usercontrol that looks something like this:

    <%@ Control Language="vb" AutoEventWireup="false"
    Codebehind="ItemPicker.ascx.vb" Inherits="myNS.ItemPicker" %>
    <div runat=server id=divMain style="text-align:justify; overflow-x:hidden;">
    <div id="divItemList" class="ItemPickerList" runat="server">
    <asp:Repeater ID="rprItems" runat="server">
    <ItemTemplate>
    <div class=ItemPickerItem id='<%#me.uniqueID
    %>_<%#Container.DataItem("ItemID")%>'><%#Container.DataItem("Description")%></div>
    </ItemTemplate>
    </asp:Repeater>
    </div>
    </div>

    In the Page_Load of this control, Me.ClientID =
    "ctl00_ContentPlaceHolder1_ItemPicker1". However, when I look at the page
    that is rendered, there is no element that has
    "ctl00_ContentPlaceHolder1_ItemPicker1" as an ID. There is, of course,
    "ctl00_ContentPlaceHolder1_ItemPicker1_divMain". I kinda thought if a
    control had a client ID it would, uhhh, have that ID on the client. I tried
    wrapping it all in a DIV and setting the DIV ID like so: <div
    id='<%=me.clientID%>', but that was a no-go of course. The only reason I
    care is because in the page that hosts this control I am registering the
    control for AsyncPostBack (like
    ScriptManager.RegisterAsyncPostBackControl(ItemPicker1)). In the
    __doPostBack event, it is looking for a control with the ID of
    "ctl00_ContentPlaceHolder1_ItemPicker1", but of course can't find it. Any
    suggestions? TIA!

    (Bonus question: is there a MS newsgroup for Atlas?)
    Monty, Jun 21, 2007
    #1
    1. Advertising

  2. Hi Monty,

    I don't think you can use RegisterAsyncPostBackControl on a UserControl
    instance. A control has ClientID property, doesn't necessary mean the id
    will always be used on the rendered page. For a UserControl, by default it
    only acts as a naming container (implements INamingContainer interface).
    Child controls inside a naming container will use parent's ClientID as
    prefix.

    When a control is registered via RegisterAsyncPostBackControl, it must
    occur in the posted form data. Usually a control that will post the form
    can be used with it.

    I also noticed you're using me.UniqueID to generate the client id of the
    div; I think you should use ClientID (the difference between UniqueID and
    ClientID is the separator used to compose the result from ID property).


    There's no dedicated newsgroup for ASP.NET AJAX now, you can just post in
    asp.net related newsgroups.


    Regards,
    Walter Wang (, remove 'online.')
    Microsoft Online Community Support

    ==================================================
    When responding to posts, please "Reply to Group" via your newsreader so
    that others may learn and benefit from your issue.
    ==================================================

    This posting is provided "AS IS" with no warranties, and confers no rights.
    Walter Wang [MSFT], Jun 22, 2007
    #2
    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. Maras
    Replies:
    1
    Views:
    3,098
    Cowboy \(Gregory A. Beamer\)
    Oct 15, 2003
  2. Replies:
    9
    Views:
    15,893
    Kumar Reddi
    Aug 9, 2006
  3. Boss302
    Replies:
    0
    Views:
    1,021
    Boss302
    Nov 21, 2006
  4. Bogdan
    Replies:
    2
    Views:
    637
    Bogdan
    Jun 9, 2008
  5. Federico

    UserControl.ClientID

    Federico, Nov 10, 2004, in forum: ASP .Net Building Controls
    Replies:
    1
    Views:
    173
    Chris Simmons
    Nov 11, 2004
Loading...

Share This Page