jiahaipeng

我要飞得更高
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Button与页面回递

Posted on 2008-05-15 20:55  飞得更高  阅读(501)  评论(5编辑  收藏  举报
    事情起因:
    今天,在做项目的时候,页面中用了两个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的取值。后台代码如下:
 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";
        }


    }

在Page_Load()方法中修改TextBox2中的值,但执行结果:

 TextBox2中的值并没有像想象中的发生变化还是“Beforesubmit",但是再回递页面的话,TextBox2中的值就变成了“AfterSubmit”。
这是为什么呢?通过设置断点,发现,当Button回递页面的时候,先执行的是Page_Load()方法,然后再执行OnClick事件中的Button1_Click(object sender, EventArgs e)方法。这就是问题的根结。
说来真是惭愧,用了这么多button的OnClick事件,竟然不知道事件触发时,系统到底做了哪些工作,导致了这个错误。哎,看来以后学习还是得多上点心啊。