事情起因:
今天,在做项目的时候,页面中用了两个updatePanel,来实现页面的异步更新。用一个updatePanel中的Button来控制另一个updatePanel中内容的更新,奇怪的是其显示的内容还是原来的内容。为简单起见,我用一个简单的例子来描述我项目中出现的问题。
首先页面代码:
今天,在做项目的时候,页面中用了两个updatePanel,来实现页面的异步更新。用一个updatePanel中的Button来控制另一个updatePanel中内容的更新,奇怪的是其显示的内容还是原来的内容。为简单起见,我用一个简单的例子来描述我项目中出现的问题。
首先页面代码:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="BeforeSubmit"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:TextBox ID="TextBox2" runat="server">
</asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="Button" /></ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
在页面中我定义了两个updatePanel,用updatePanel中的Button1来控制updatePanel2种的TextBox2的取值。后台代码如下:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="BeforeSubmit"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:TextBox ID="TextBox2" runat="server">
</asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="Button" /></ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TextBox2.Text = Label1.Text;
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "AfterSubmit";
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
TextBox2.Text = Label1.Text;
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "AfterSubmit";
}
}
在Page_Load()方法中修改TextBox2中的值,但执行结果:
TextBox2中的值并没有像想象中的发生变化还是“Beforesubmit",但是再回递页面的话,TextBox2中的值就变成了“AfterSubmit”。
这是为什么呢?通过设置断点,发现,当Button回递页面的时候,先执行的是Page_Load()方法,然后再执行OnClick事件中的Button1_Click(object sender, EventArgs e)方法。这就是问题的根结。
说来真是惭愧,用了这么多button的OnClick事件,竟然不知道事件触发时,系统到底做了哪些工作,导致了这个错误。哎,看来以后学习还是得多上点心啊。