asp.net从内容页面更改主页面部分css

时间:2014-01-31 09:08:42

标签: c# asp.net master-pages

我的母版页中有以下代码:

<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>

对于一个特定的内容页面,我想将上面<section>的类值更改为class="content-wrapper-full-width main-content clear-fix"

如何从内容页面的代码隐藏中访问<section>的属性并修改其值?

2 个答案:

答案 0 :(得分:5)

您可以在master中创建一个公共属性来获取/设置类:

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

现在您可以将主数据转换为正确的类型并在内容页面中访问此属性:

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";
}

旁注:您可以使用@Master directive在强类型内容页面中使用Master属性。然后你有编译时安全性,你不需要把它强制转换为实际类型:

在您的内容页面中(替换为实际类型):

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

现在这可以直接使用:

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

答案 1 :(得分:0)

我认为您可以使用代码中的FindControl() method来执行以下操作:

((HtmlGenericControl)Master.FindControl("FeaturedContent")).attributes["class"] = "content-wrapper-full-width main-content clear-fix";