从后面的代码更改母版页中的控件属性后出现问题

时间:2013-09-27 20:31:41

标签: c# asp.net

背景

我在嵌套母版页中有一些LinkBut​​tons。 它们是子菜单,因此当用户单击按钮时,它会将用户重定向到特定页面。 每个按钮显示一个图标和特定页面的名称。 (例如项目描述)

NestedMasterPage.master中的标记如下所示:

<asp:LinkButton ID="btnTest" CssClass="testButton" runat="server">
    <div class="submenu-left"><img src="~/Images/test.png" runat="server" /></div>
    <div class="submenu-right">Test</div>
</asp:LinkButton>

我想做什么

单击链接按钮时,我想更改单击链接按钮的背景颜色,以便用户知道他们当前所在的页面。

我做了什么

在NestedMasterPage.master.cs中,对于每个链接按钮,我有

public LinkButton BtnTest
{
    get{ return btnTest; }
}

在每个.aspx页面中,我添加了

<%@ MasterType VirtualPath="~/NestedMasterPage.master" %>

当加载重定向页面时,我添加了此代码来更改背景颜色。

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    Master.BtnTest.BackColor = System.Drawing.Color.Black;
}

这确实会改变背景颜色......但我遇到了问题。

问题

我遇到的问题是,当重定向页面发生回发时,按钮会丢失图标和页面名称,并且只保留颜色。

e.g。

Click button2 redirects to page2, and the button2 has black backcolor:
+---------+  +---------+  +---------+
| button1 |  | button2 |  | button3 |
+---------+  +---------+  +---------+
   white        black        white

After postback: The button loses the text (and icon)
+---------+  +---------+  +---------+
| button1 |  |         |  | button3 |
+---------+  +---------+  +---------+
   white        black        white

我尝试将Master.BtnTest.BackColor = System.Drawing.Color.Black;放入if(!Page.IsPostBack),但显然没有做任何事情。

我不明白为什么修改颜色会这样做。 每次回发发生时重新呈现按钮文本听起来不是正确的解决方案,我想知道这里到底发生了什么。 我看了很多关于访问Master文件中的控件的文章,但没有找到解决这类问题的任何内容,我甚至不知道应该找到类似的问题。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但似乎是导致文字和图标消失的<div>

<asp:LinkButton ID="btnTest" CssClass="testButton" runat="server" >
    <img src="~/Images/testIcon.png" class="submenu-left" runat="server" />
    <p class="submenu-right">Test</p>
</asp:LinkButton> 

这样做很有效但我不确定这是否是正确的解决方案,我仍然不知道为什么会导致这样的问题..