How to access web control from code behind page?

  • Thread starter Thread starter William Parker
  • Start date Start date
W

William Parker

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.
 
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!
 
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
 
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
 
Thank you - this is exactly what I was not understanding, and with this help
it is now working great!!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top