【IT168技术文档】
今天,在做项目的时候,页面中用了两个updatePanel,来实现页面的异步更新。用一个updatePanel中的Button来控制另一个 updatePanel中内容的更新,奇怪的是其显示的内容还是原来的内容。为简单起见,我用一个简单的例子来描述我项目中出现的问题。
首先页面代码:
在页面中我定义了两个updatePanel,用updatePanel中的Button1来控制updatePanel2种的TextBox2的取值。后台代码如下:<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>
在Page_Load()方法中修改TextBox2中的值,但执行结果: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"; } }
TextBox2中的值并没有像想象中的发生变化还是“Beforesubmit",但是再回递页面的话,TextBox2中的值就变成了“AfterSubmit”。
这是为什么呢?通过设置断点,发现,当Button回递页面的时候,先执行的是Page_Load()方法,然后再执行OnClick事件中的Button1_Click(object sender, EventArgs e)方法。这就是问题的根结。
说来真是惭愧,用了这么多button的OnClick事件,竟然不知道事件触发时,系统到底做了哪些工作,导致了这个错误。哎,看来以后学习还是得多上点心啊。