我想在我的子页的主页中更改div样式(显示)。
我用:
protected void ShowMsgText(int MsgID)
{
HtmlGenericControl MsgInner;
MsgInner =((HtmlGenericControl)Master.FindControl("MsgInner"));
MsgInner.Attributes["class"] = "MsgInnerShow";
}
MsgInner是我的div id,但是在运行之后有任何改变!
答案 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);
}