如何在子页面中更改主页面中的Div Class

时间:2012-09-19 16:34:10

标签: asp.net css master-pages

我想在我的子页的主页中更改div样式(显示)。

我用:

    protected void ShowMsgText(int MsgID)
    {
        HtmlGenericControl MsgInner;
        MsgInner =((HtmlGenericControl)Master.FindControl("MsgInner"));
        MsgInner.Attributes["class"] = "MsgInnerShow";
    }

MsgInner是我的div id,但是在运行之后有任何改变!

2 个答案:

答案 0 :(得分:3)

我调查了这个问题。我相信你有子页面(aspx)中的更新面板和母版页中的消息div。更新面板可以更新它下面的控件,但它无法更新控件那些是在更新面板外面。因此,您需要将更新面板放在母版页中。

在母版页中

<ajaxToolkit:ToolkitScriptManager runat="Server" EnablePartialRendering="true" ID="ScriptManager1" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>              
                <div><strong>Demo for master page updation</strong></div>
                <div  id="divMaster" runat="server">
                    I am div in master page, going to change with ajax call
                </div>            

                <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
                </asp:ContentPlaceHolder>
            </ContentTemplate>
</asp:UpdatePanel>    

在内容页面(.aspx)

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

在内容页面代码(.aspx.cs)

protected void Button1_Click(object sender, EventArgs e)
{
      System.Threading.Thread.Sleep(2000); //To check the effect of ajax call, must be removed
      HtmlGenericControl divMaster = (HtmlGenericControl) this.Master.FindControl("divMaster");
      divMaster.InnerHtml = "hello I am being change from child page";
}

答案 1 :(得分:2)

在母版页上定义公共属性

MyMasterPage.Master.cs

private string _divClass = "DefaultClass";
public string DivClass
{
    get
    {
        return _divClass;
    }
    set
    {
        _divClass = value;
    }
}

将此属性添加到母版页上div的HTML标记:

MyMasterPage.Master:

<div id="MyDiv" runat="server" class="<%=DivClass %>">

您可以将此值设置为子页面的OnInit或OnLoad事件。

ChildPage.aspx.cs

protected override void OnInit(EventArgs e)
    {
        var master = Page.Master as MyMasterPage;
        if (master != null)
        {
            master.DivClass = "MyOtherClassName";
        }
        base.OnInit(e);
    }