点击button2后。Viewstate恢复到了先前的状态了。。不知道理解的对不对。

解决方案 »

  1.   

    不想 点击button2,div"name1"显示
      

  2.   

    把两个按钮都放在两个updatePanel之外,分别配置它的trigger 试试
      

  3.   

    这样还是不要用updatepanel吧,只用js也可以实现的
      

  4.   

    首先,UpdatePanel应该设置UpdateMode为独立刷新的模式。既然是一个共性的东西,应该设计为单独的ascx。我写的demo,如下:文件 TestTimerControl.asax:
    <%@ Control Language="C#" %><script runat="server">
        public int 点击按钮后等待的秒数
        {
            get
            {
                EnsureChildControls();
                return this.Timer1.Interval / 1000;
            }
            set
            {
                EnsureChildControls();
                this.Timer1.Interval = value * 1000;
            }
        }    public string 按钮文字
        {
            get
            {
                EnsureChildControls();
                return this.Button1.Text;
            }
            set
            {
                EnsureChildControls();
                this.Button1.Text = value;
            }
        }    public event EventHandler<EventArgs> 到时间提醒;    protected void Button1_Click(object sender, EventArgs e)
        {
            this.Timer1.Enabled = true;
        }    protected void Timer1_Tick(object sender, EventArgs e)
        {
            Timer1.Enabled = false;
            if (this.到时间提醒 != null)
                this.到时间提醒(this, EventArgs.Empty);
        }
    </script><asp:Button ID="Button1" runat="server" Text="定时" OnClick="Button1_Click" />
    <asp:Timer ID="Timer1" runat="server" Enabled="False" OnTick="Timer1_Tick" />
    这个组件中含有一个按钮和一个Timer控件,以及一个事件。当按下按钮之后,等待一段时间(参数上设置的),然后触发事件通知外界“时间到了”。这样,把它拖入asp.net ajax的任何页面就可以。例如我在下面的简单测试页面上两个UpdatePanel里分别拖入一个组件实例,然后分别设置事件aa和bb,再写上aa方法和bb方法的后台代码:<%@ Page Language="C#" %><script runat="server">
        protected void aa(object sender, EventArgs e)
        {
            this.Label1.Visible = false;
            this.TestTimerControl1.Visible = false;
        }    protected void bb(object sender, EventArgs e)
        {
            this.Label2.Text = DateTime.Now.ToLongTimeString();
        }
    </script><%@ Register Src="TestTimerControl.ascx" TagName="TestTimerControl" TagPrefix="uc1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label-1"></asp:Label>
                <uc1:TestTimerControl ID="TestTimerControl1" runat="server" 点击按钮后等待的秒数="3" 按钮文字="隐藏"
                    On到时间提醒="aa" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Label ID="Label2" runat="server" Text="Label-2"></asp:Label>
                <uc1:TestTimerControl ID="TestTimerControl2" runat="server" 点击按钮后等待的秒数="2" 按钮文字="显示现在的时间"
                    On到时间提醒="bb" />
            </ContentTemplate>
        </asp:UpdatePanel>
        </form>
    </body>
    </html>
      

  5.   

    asp.net ajax处理流程,整个页面的状态是保持得好好的,你不会在某一个事件中发现以前别的地方的事件处理中涉及的控件属性“丢失”了。很多帖子中我们都看到动不动就无厘头地夸张js的做法。其实我们发现乱写javascript的人做不出复杂交互的页面,因为那样写会丢失页面状态。不要乱写脚本代码。
      

  6.   

    如果果真打算不考虑页面状态完整性地使用js来实现交互,应该放弃使用asp.net界面编程,asp.net代码仅仅用来实现脚本所访问的web服务功能。如果做得很彻底,那么你自己写一套页面状态管理系统,自己写一套远超过asp.net ajax能力的ajax作为你的公司的核心技术。
      

  7.   

    Sorry,“文件 TestTimerControl.asax”写错了,应该是“文件 TestTimerControl.ascx”。
      

  8.   

    sp1234,正解。将UpdatePanel封装到自定义控件,可解决一个页面多个UpdatePanel协同工作的问题。