How to access web control from code behind page?

Discussion in 'ASP .Net Web Controls' started by William Parker, Jun 27, 2004.

  1. I have a web control I made called header.ascx. It has its own properties
    and methods I defined. But I cannot figure out how to access this control
    from my code behind page.

    I can create the web control just fine and script with it as needed from the
    webform1.aspx page itself just fine, like this:

    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"
    Inherits="mysite.WebForm1" %>
    <%@ Register TagPrefix="uc1" TagName="header" Src="header.ascx" %>
    <uc1:header Title="This is working!!" id="Header1"
    runat="server"></uc1:header>
    <%
    String mytitle = Header1.Title;
    Header1.Title = mytitle + " abc";
    %>
    <uc1:footer id="Footer1" runat="server"></uc1:footer>

    But how can I set or get to the web control's properties from the code
    behind's Page_Load event instead of directly in the .aspx file? For example
    this does NOT work:

    private void Page_Load(object sender, System.EventArgs e)
    {
    String mytitle = Header1.Title;
    Header1.Title = mytitle + " abc";
    }

    When I try that code above I get this error:
    "d:\inetpub\wwwroot\mysite\WebForm1.aspx.cs(23): The type or namespace name
    'Header1' could not be found (are you missing a using directive or an
    assembly reference?)".

    If I add a declaration above Page_Load like this "protected
    System.Web.UI.UserControl Header1;" then the above error goes away, but then
    it complains that Header1 doesn't contain a definition for "Title". This is
    because by declaring Header1 in the web form code behind it is obviously
    just creating it as a new, blank web control when in fact I am just looking
    for a way to reference the one that is created in the .aspx file.

    Bottom line is that I want to be able to reference the Header1 web control
    created in the .aspx file from my code behind page, but I don't know how I
    am supposed to reference or tie in to it. Can someone please help? Thank
    you very much.
    William Parker, Jun 27, 2004
    #1
    1. Advertising

  2. William Parker

    DalePres Guest

    Make sure you add a declaration for the control in your code-behind class.

    Dale

    "William Parker" <> wrote in message
    news:...
    > I have a web control I made called header.ascx. It has its own properties
    > and methods I defined. But I cannot figure out how to access this control
    > from my code behind page.
    >
    > I can create the web control just fine and script with it as needed from

    the
    > webform1.aspx page itself just fine, like this:
    >
    > <%@ Page language="c#" Codebehind="WebForm1.aspx.cs"

    AutoEventWireup="false"
    > Inherits="mysite.WebForm1" %>
    > <%@ Register TagPrefix="uc1" TagName="header" Src="header.ascx" %>
    > <uc1:header Title="This is working!!" id="Header1"
    > runat="server"></uc1:header>
    > <%
    > String mytitle = Header1.Title;
    > Header1.Title = mytitle + " abc";
    > %>
    > <uc1:footer id="Footer1" runat="server"></uc1:footer>
    >
    > But how can I set or get to the web control's properties from the code
    > behind's Page_Load event instead of directly in the .aspx file? For

    example
    > this does NOT work:
    >
    > private void Page_Load(object sender, System.EventArgs e)
    > {
    > String mytitle = Header1.Title;
    > Header1.Title = mytitle + " abc";
    > }
    >
    > When I try that code above I get this error:
    > "d:\inetpub\wwwroot\mysite\WebForm1.aspx.cs(23): The type or namespace

    name
    > 'Header1' could not be found (are you missing a using directive or an
    > assembly reference?)".
    >
    > If I add a declaration above Page_Load like this "protected
    > System.Web.UI.UserControl Header1;" then the above error goes away, but

    then
    > it complains that Header1 doesn't contain a definition for "Title". This

    is
    > because by declaring Header1 in the web form code behind it is obviously
    > just creating it as a new, blank web control when in fact I am just

    looking
    > for a way to reference the one that is created in the .aspx file.
    >
    > Bottom line is that I want to be able to reference the Header1 web control
    > created in the .aspx file from my code behind page, but I don't know how I
    > am supposed to reference or tie in to it. Can someone please help? Thank
    > you very much.
    >
    >
    >
    DalePres, Jun 27, 2004
    #2
    1. Advertising

  3. Thanks Dale, but how *exactly* do I go about doing that?

    For example in my original post I said this:
    "If I add a declaration above Page_Load in the code behind like this
    "protected System.Web.UI.UserControl Header1;" then the above error goes
    away, but then it complains that Header1 doesn't contain a definition for
    "Title". This is because by declaring Header1 in the web form code behind
    it is obviously just creating it as a new, blank web control when in fact I
    am just looking for a way to reference the one that is created in the .aspx
    file. So obviously this is the wrong approach, but the right idea?"

    Anyway I am confused how exactly I am support to add a declaration for the
    contorl in the code behind which references the user control created in the
    ..aspx with:
    <%@ Register TagPrefix="uc1" TagName="header" Src="header.ascx" %>
    <uc1:header Title="This is working!!" id="Header1"

    Can you please advise? Thanks!


    "DalePres" <> wrote in message
    news:...
    > Make sure you add a declaration for the control in your code-behind class.
    >
    > Dale
    >
    William Parker, Jun 28, 2004
    #3
  4. You shouldnt declare that component as system.web.ui.usercontrol in
    codebehind, instead you should declare that component as your usercontrol
    like <Usercontrolnamespace>.<usercontrolclassname>. So that you can access
    your usercontrol properties inside codebehind

    --
    Saravana
    Microsoft MVP - ASP.NET
    www.extremeexperts.com



    "William Parker" <> wrote in message
    news:...
    > Thanks Dale, but how *exactly* do I go about doing that?
    >
    > For example in my original post I said this:
    > "If I add a declaration above Page_Load in the code behind like this
    > "protected System.Web.UI.UserControl Header1;" then the above error goes
    > away, but then it complains that Header1 doesn't contain a definition for
    > "Title". This is because by declaring Header1 in the web form code behind
    > it is obviously just creating it as a new, blank web control when in fact

    I
    > am just looking for a way to reference the one that is created in the

    ..aspx
    > file. So obviously this is the wrong approach, but the right idea?"
    >
    > Anyway I am confused how exactly I am support to add a declaration for the
    > contorl in the code behind which references the user control created in

    the
    > .aspx with:
    > <%@ Register TagPrefix="uc1" TagName="header" Src="header.ascx" %>
    > <uc1:header Title="This is working!!" id="Header1"
    >
    > Can you please advise? Thanks!
    >
    >
    > "DalePres" <> wrote in message
    > news:...
    > > Make sure you add a declaration for the control in your code-behind

    class.
    > >
    > > Dale
    > >

    >
    >
    >
    Saravana [MVP], Jun 28, 2004
    #4
  5. William,
    protected YourNamespace.header Header1;

    and then you can access Header1.Title.

    You have named your usercontrol with a Type name, and then you access it
    through a variable name, so if I have a user control that I have created
    <uc1:Header ID="myHeader" runat="server"/>
    then in my code behind, I need to declare it:
    protected MyNamespace.Header myHeader;

    now I can say: myHeader.Title. . .
    but if you declare it as UserControl, then you can only access properties of
    UserControl, so you need to declare it as the correct custom type.

    Best regards,
    Jeffrey Palermo

    "William Parker" <> wrote in message
    news:...
    > I have a web control I made called header.ascx. It has its own properties
    > and methods I defined. But I cannot figure out how to access this control
    > from my code behind page.
    >
    > I can create the web control just fine and script with it as needed from

    the
    > webform1.aspx page itself just fine, like this:
    >
    > <%@ Page language="c#" Codebehind="WebForm1.aspx.cs"

    AutoEventWireup="false"
    > Inherits="mysite.WebForm1" %>
    > <%@ Register TagPrefix="uc1" TagName="header" Src="header.ascx" %>
    > <uc1:header Title="This is working!!" id="Header1"
    > runat="server"></uc1:header>
    > <%
    > String mytitle = Header1.Title;
    > Header1.Title = mytitle + " abc";
    > %>
    > <uc1:footer id="Footer1" runat="server"></uc1:footer>
    >
    > But how can I set or get to the web control's properties from the code
    > behind's Page_Load event instead of directly in the .aspx file? For

    example
    > this does NOT work:
    >
    > private void Page_Load(object sender, System.EventArgs e)
    > {
    > String mytitle = Header1.Title;
    > Header1.Title = mytitle + " abc";
    > }
    >
    > When I try that code above I get this error:
    > "d:\inetpub\wwwroot\mysite\WebForm1.aspx.cs(23): The type or namespace

    name
    > 'Header1' could not be found (are you missing a using directive or an
    > assembly reference?)".
    >
    > If I add a declaration above Page_Load like this "protected
    > System.Web.UI.UserControl Header1;" then the above error goes away, but

    then
    > it complains that Header1 doesn't contain a definition for "Title". This

    is
    > because by declaring Header1 in the web form code behind it is obviously
    > just creating it as a new, blank web control when in fact I am just

    looking
    > for a way to reference the one that is created in the .aspx file.
    >
    > Bottom line is that I want to be able to reference the Header1 web control
    > created in the .aspx file from my code behind page, but I don't know how I
    > am supposed to reference or tie in to it. Can someone please help? Thank
    > you very much.
    >
    >
    >
    Jeffrey Palermo [MCP], Jun 28, 2004
    #5
  6. Thank you - this is exactly what I was not understanding, and with this help
    it is now working great!!

    "Jeffrey Palermo [MCP]" <http://dotnetjunkies.com/weblog/jpalermo> wrote in
    message news:...
    > William,
    > protected YourNamespace.header Header1;
    >
    > and then you can access Header1.Title.
    >
    > You have named your usercontrol with a Type name, and then you access it
    > through a variable name, so if I have a user control that I have created
    > <uc1:Header ID="myHeader" runat="server"/>
    > then in my code behind, I need to declare it:
    > protected MyNamespace.Header myHeader;
    >
    > now I can say: myHeader.Title. . .
    > but if you declare it as UserControl, then you can only access properties

    of
    > UserControl, so you need to declare it as the correct custom type.
    >
    > Best regards,
    > Jeffrey Palermo
    >
    William Parker, Jun 28, 2004
    #6
    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. Ben Miller [msft]

    Re: Code Behind vs. no code behind: error

    Ben Miller [msft], Jun 27, 2003, in forum: ASP .Net
    Replies:
    1
    Views:
    565
    Alphonse Giambrone
    Jun 28, 2003
  2. William Parker
    Replies:
    5
    Views:
    9,230
    William Parker
    Jun 28, 2004
  3. Daniel Manes

    Code-Behind Pain in the Behind!

    Daniel Manes, Jun 10, 2005, in forum: ASP .Net
    Replies:
    11
    Views:
    639
  4. John

    Non-code behind to code behind

    John, Feb 19, 2007, in forum: ASP .Net
    Replies:
    2
    Views:
    463
    =?Utf-8?B?UGV0ZXIgQnJvbWJlcmcgW0MjIE1WUF0=?=
    Feb 19, 2007
  5. JB
    Replies:
    3
    Views:
    2,101
    Muqadder
    Mar 5, 2009
Loading...

Share This Page