Amol Kolekar
Amol Kolekar

Reputation: 2325

How to access user control properties from page?

I am having problem in accessing user control properties from page. I have usercontrol on master page with some properties,but i am unable to access them from the codebehind of the page which uses that master page.i want to set some properties of usercontrol on page load.Can anyone suggest how can i access them from page.

E.G.

User Control

ucTabSystem.ascx has following properties:

 public string TabName
    {
        get { return _tabName; }
        set { _tabName = value; }
    }
 public string TabUrl
    {
        get { return _tabUrl; }
        set { _tabUrl = value; }
    }

Master Page

InHouseTPAMaster.master has this user control in it.

ClaimHomePage.aspx

Uses Master page InHouseTPAMaster.master and i want to set usercontrol properties in page load of this page.

Upvotes: 0

Views: 9961

Answers (3)

KV Prajapati
KV Prajapati

Reputation: 94625

You need to define a public interface with two properties - TabName and TabUrl in separate code file.

public interface  IUserControl
{
    string TabName{get;set;}
    string TabUrl {get;set;}
}

Implements the IUserControl interface to UserControl class. For instance, I've MyUserControl and its code-behind is:

public partial class MyUserControl : System.Web.UI.UserControl , IUserControl 
{
    public string TabName
    {
        get { return ViewState["TabName"] == null ? string.Empty : ViewState["TabName"].ToString(); }
        set { ViewState["TabName"]= value; }
    }
    public string TabUrl
    {
        get { return ViewState["TabUrl"] == null ? string.Empty : ViewState["TabUrl"].ToString(); }
        set { ViewState["TabUrl"] = value; }
    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

Register MyUserControl in MasterPage and it has following markup in it.(master page)

 <%@ Register src="MyUserControl.ascx" tagname="MyUserControl" tagprefix="uc1" %>
 ......
 <uc1:MyUserControl ID="MyUserControl1" runat="server" />

In Page_Load event (or any other) handler of aspx page (Which is a content page of said master page).

protected void Page_Load(object sender, EventArgs e)
    {
        IUserControl control = Master.FindControl("MyUserControl1") as IUserControl;
        control.TabName = "Something";
        control.TabUrl = "http://www.example.com";
    }

Upvotes: 1

JayOnDotNet
JayOnDotNet

Reputation: 398

You can use two methods. The first is by using Page.Master.FindControl('controlID'). Then you can cast it to the type of your user control. The second method is by adding a <%@ MasterType VirtualPath="" TypeName=""%> tag to your aspx page. In the VirtualPath add the virtual path to the master page, and the class in the TypeName. You can then access everything with intellisense

Upvotes: 1

shenhengbin
shenhengbin

Reputation: 4294

You can try this way to set your properties...

<%@ Register TagPrefix="Tab" TagName="sys" Src="ucTabSystem.ascx" %>

<tab:sys id="mysys" runat="server" TabName="xxxxx"    TabUrl = "yyyy"  />

Upvotes: 1

Related Questions