UpdatePanel 控件失效,不能局部刷新

      最近在看ASP.NET 4 入门到精通,看到AJAX 一章中的 UpdatePanel 。平时AJAX估计都不会使用这种控件,一般都直接javascript 脚本实现异步局部刷新,但既然微软提供了这个控件,那就了解一下也好。本以为很简单,而实际上也很简单,但我在按着教程做的时候,走入了个误区,然后 UpdatePanel  控件一直都没什么反应,也无法出现和书籍中相同的结果。上网搜索了好一会,也没能解决什么问题,都是说设置这个设置那个,但实际上 UpdatePanel 控件从工具箱拖出来的时候的默认设置就是可以局部刷新的。

  最后发现,我用vs 是新建网站,不是新建项目,而 UpdatePanel 在新建项目中可以正常运行。其实 WebSite 和 Application 的区别了解不是特别清楚,只知道网站是请求过来时服务器再动态编译,而项目则要先编译成dll才能运行,有空要看看MSDN 的文档。 关键是不知道为什么网站不能用UpDatePanel 呢? 上个简单例子先:

  先是ASPX 页代码如下:

 <form id="form1" runat="server">
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                <br/>
                <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
            </ContentTemplate>
        </asp:UpdatePanel>
</form>

  

  然后是隐藏代码页代码:

public partial class UpdatePanel : System.Web.UI.Page
{
        protected void Page_Load(object sender, EventArgs e)
        {
            Label2.Text = DateTime.Now.ToString();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = System.DateTime.Now.ToString();
        }
}

  其实没什么特别的,点击按钮,会发现 UpdatePanel1 控件中的 Label1 显示的时间会刷新,但 UpdatePanel1 控件外的 Label2 控件显示的时间是最初加载显示的时间,结果如下:

  

原文地址:https://www.cnblogs.com/lhgohead/p/6099716.html