Question

I have the following code in my master page:

<div id="body" runat="server">
        <asp:ContentPlaceHolder runat="server" ID="FeaturedContent" />
        <section runat="server" id="sectionMainContent" class="content-wrapper main-content clear-fix">
            <asp:ContentPlaceHolder runat="server" ID="MainContent" />
        </section>
    </div>

For one specific content page I would like to change the class value of the <section> above to something like class="content-wrapper-full-width main-content clear-fix"

How can I access the <section>'s attributes from codebehind of the content page and modify its value?

Was it helpful?

Solution

You can create a public property in your master which gets/sets the class:

// sectionMainContent is a HtmlGenericControl in codebehind
public String SectionCssClass
{
    get { return sectionMainContent.Attributes["class"]; }
    set { sectionMainContent.Attributes["class"] = value; }
}

Now you can cast the master to the correct type and access this property in your contentpage:

protected void Page_Init(object sender, EventArgs e)
{ 
    SiteMaster master = this.Master as SiteMaster; // replace with correct type
    if(master != null)
        master.SectionCssClass = "content-wrapper-full-width main-content clear-fix";
}

Side-note: you can use the @Master directive to use the Master property in your content-page strongly typed. Then you have compile time safety and you don't need to cast it to the actual type:

In your content-page(replace with actual type):

<%@ MasterType  VirtualPath="~/Site.Master"%>

Now this works directly:

protected void Page_Init(object sender, EventArgs e)
{
    this.Master.SectionCssClass = "content-wrapper-full-width main-content clear-fix";
}

OTHER TIPS

I think you could use the FindControl() method from code behind with something like :

((HtmlGenericControl)Master.FindControl("FeaturedContent")).attributes["class"] = "content-wrapper-full-width main-content clear-fix";
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top