0

我想从我的子页面更改母版页中的 div 样式(显示) 。

我用 :

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

MsgInner 是我的 div id,但是运行后的任何更改!

4

2 回答 2

4

我已经调查了这个问题。我相信您在子页面 (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";
}
于 2012-09-19T16:43:10.250 回答
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);
    }
于 2012-09-19T17:31:55.913 回答