ASP.NET静态变量存放的对象引用为何被实例化?
网页源代码:
<asp:Button ID="btnPassword" runat="server" CausesValidation="False" Height="20px" OnClick="Choice" Text="密码修改" Width="100px" BorderWidth="0"/>
<asp:Button ID="btnPersonal" runat="server" CausesValidation="False" OnClick="Choice" Text="个人信息修改" BorderWidth="0" />
后台代码:
public partial class PersonalModify : System.Web.UI.Page
{
static List<Button> lstBtn;
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
return;
lstBtn = new List<Button>();
lstBtn.Add(btnPassword);
lstBtn.Add(btnPersonal);
}
protected void Choice(object sender, EventArgs e)
{
//给选中的和未选中的按钮分别着色
Button btnSender = (Button)sender;
for (int i = 0; i < lstBtn.Count; i++)
{
if (lstBtn[i].ID == btnSender.ID)
lstBtn[i].BackColor = System.Drawing.Color.GreenYellow;
else
lstBtn[i].BackColor = System.Drawing.Color.LightGray;
}
}
}
上述程序旨在当用户点击某按钮时,该按钮变为绿色,而另一个按钮变为灰色。但运行不成功。经测试,在Page_Load尚未结束时,lstBtn中存放的两个元素确实是对页面上两个Button的引用,如果手动改变页面Button的颜色,lstBtn中的元素颜色属性也跟着改变。但一旦结束了Page_Load,当用户点击按钮时激发Choice方法,在该方法开始处,经测试发现lstBtn中元素与页面Button的颜色属性变化已经不同步了,就好像是各自独立的对象。这是为什么呢?谢谢!