`
keiite
  • 浏览: 67228 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

ASP.NET AJAX RC Tip:页面中无UpdatePanel时UpdateProgress

    博客分类:
  • .NET
阅读更多

为什么安装ASP.NET AJAX RC之后,某些页面总是在创建UpdateProgress时出现脚本错误。当时给了一个不太好的解决方案,刚才简单看了一下 System.Web.Extensions.dll中的相关实现,得出了一个更好的解决方案,在这里简单地说一下。

  首先,我模拟一个“事发现场”,由此开始解决问题:一般来说,在所有的页面中可能需要统一的Updating Animation,于是可能会将一个UpdateProgress连同ScriptManager放在MasterPage中,如下:

Site.master
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
</asp:ScriptManager>

<asp:ContentPlaceHolder id="Main" runat="server"></asp:ContentPlaceHolder>

<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
Hello World!
</ProgressTemplate>
</asp:UpdateProgress>

  如果直接以此生成一个页面,并随意加上一个UpdatePanel:

Default.aspx
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">

<asp:UpdatePanel runat="server">
<ContentTemplate>
...
</ContentTemplate>
</asp:UpdatePanel>

</asp:Content>

  此时生成的HTML为:

HTML
...
<form>
...
<script src="/AjaxEnabledWebSite/WebResource.axd?..."
type="text/javascript"></script>

<!-- MicrosoftAjax.js -->
<script src="/AjaxEnabledWebSite/ScriptResource.axd?..."
type="text/javascript"></script>

<!-- MicrosoftAjaxWebForms.js -->
<script src="/AjaxEnabledWebSite/ScriptResource.axd?..."
type="text/javascript"></script>

...
<script type="text/javascript">
<!--
Sys.Application.initialize();
Sys.Application.add_init(function() {
$create(
Sys.UI._UpdateProgress,
{"associatedUpdatePanelId":null,
"displayAfter":500,
"dynamicLayout":true},
null,
null,
$get("ctl00_UpdateProgress1"));
});
// -->
</script>
...
</form>
...

  请注意此时的UpdateProgress以一个Sys.UI.Control的形式使用$create被创建,而 Sys.UI._UpdateProgress(看来ASP.NET AJAX不希望我们直接使用这个类)是在MicrosoftAjaxWebForms.js文件里被引入。

  于是问题就出现了,如果页面中没有UpdatePanel,那么MicrosoftAjaxWebForms.js文件不会被引入,而那句$create还在!这就导致了JavaScript错误的发生。当时我提供的方法是:那么就在Site.master里强制加上一个 UpdatePanel吧。如下:

强制UpdatePanel
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UP1">
<ContentTemplate></ContentTemplate>
</asp:UpdatePanel>

  这里把UpdateMode设为了Conditional,也就是说,这里的UpdatePanel永远不会被更新,它的作用只是“强迫”MicrosoftAjaxWebForms.js文件被引入。不过这不是个好的解决方案。

  如果要解决这个问题,不要让$create语句出现不就可以了吗?在查看过代码以后,发现$create语句只会在ScriptManager 的EnablePartialRendering属性为True的情况下出现,那么我们就把ScriptManager的这个属性暴露出去吧。我们可以修改一下Site.master.cs中Site类的代码,把它增加一个属性:

Site.master.cs
public bool EnablePartialRendering
{
get
{
return this.ScriptManager1.EnablePartialRendering;
}
set
{
this.ScriptManager1.EnablePartialRendering = value;
}
}

  然后在页面里把MasterPage的EnablePartialRendering属性设为False即可。需要注意的是只有Init阶段才能设置ScriptManager的EnablePartialRendering属性。如下:

Default.aspx.cs
protected override void OnInit(EventArgs e)
{
base.OnInit(e);

(this.Master as Site).EnablePartialRendering = false;
}

分享到:
评论

相关推荐

    ASP.NET AJAX入门系列:使用UpdatePanel控件

    其中,UpdatePanel作为ASP.NET AJAX Extensions的重要组成部分之一,其设计目的就是为了简化Web应用程序中实现局部刷新的过程。 UpdatePanel控件允许开发者在不重新加载整个页面的情况下更新页面的一部分内容,从而...

    ASP.NET_AJAX入门系列:使用UpdatePanel控件.doc

    UpdatePanel是ASP.NET AJAX库中的核心组件之一,用于实现页面的部分区域(称为“更新面板”)的无刷新更新。通过在页面上添加UpdatePanel和ScriptManager控件,可以轻松地将传统的全页面回发转变为局部更新。...

    ASP.NET AJAX深入浅出系列课程(17):关注ASP.NET AJAX的核心:ScriptManager

    在ASP.NET AJAX框架中,ScriptManager组件扮演着至关重要的角色,它是整个AJAX功能的基础,使得开发者能够轻松地在网页上集成客户端脚本和服务端组件。 ScriptManager的主要职责包括: 1. **加载和注册JavaScript...

    ASP.NET_AJAX入门系列

    ASP.NET_AJAX入门系列:概述.doc ASP.NET_AJAX_在Web开发中的应用.doc ASP.NET_AJAX入门系列:Timer控件简单使用....ASP.NET_AJAX入门系列:在母版页中使用UpdatePanel.doc ASP.NET_AJAX入门系列:自定义异常处理.doc

    精通ASP.NET 4.0网络编程:基础、框架与项目实战_源码

    8. **ASP.NET AJAX**:提供异步更新页面的能力,提高用户体验。学习如何使用UpdatePanel、ScriptManager和AJAX控件。 9. **Web部署**:涵盖IIS配置、发布工具(如Web Deploy)的使用,以及调试和性能调优技巧。 10...

    完全手册:ASP.net.Ajax电子教程

    - **ScriptManager**:它是ASP.NET AJAX页面中的关键组件,负责管理客户端脚本、注册AJAX库和处理AJAX请求。 **3. ASP.NET AJAX开发** - **客户端脚本编程**:通过JavaScript API,开发者可以自定义AJAX行为,如...

    asp.net ajax 1.0

    1. **UpdatePanel**:这是一个服务器控件,它定义了页面上的一个区域,该区域可以使用AJAX进行无刷新更新。UpdatePanel内的控件交互不会导致整个页面生命周期重新运行,而是通过异步调用来实现局部刷新。 2. **...

    ASP.NET Ajax程序设计 源码 免费

    在ASP.NET框架中,AJAX扩展了传统的Web开发模式,允许开发者创建部分页面更新,而不是整个页面刷新,从而提升了用户体验。本资源包含了ASP.NET AJAX程序设计的源码,这对学习和理解这一技术具有极大的帮助。 首先,...

    ASP.NET AJAX核心控件示例

    在这个"ASP.NET AJAX核心控件示例"中,我们将探讨四个关键的控件:ScriptManager、UpdatePanel、UpdateProgress和Timer,它们在实现页面无刷新更新和优化用户体验方面起着重要作用。 1. **ScriptManager**: ...

    ASP.NET Ajax 写的一个用户注册实例

    2. **AJAX调用**:使用ASP.NET AJAX的UpdatePanel或jQuery的$.ajax方法,实现当用户点击“注册”按钮时,仅更新表单的部分区域,而不是整个页面。这使得注册过程看起来更即时,减少了用户的等待时间。 3. **服务器...

    asp.net AJAX工具包

    1. 引入必要的引用:在ASP.NET页面中添加ScriptManager控件,并确保引入ASP.NET AJAX库。 2. 添加UpdatePanel:在需要异步更新的区域放置UpdatePanel。 3. 使用控件或行为:根据需求选择合适的控件或行为,并在页面...

    ASP.NET AJAX

    ajax技术,无刷新技术 导读:ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持...

    ASP.NET AJAX深入浅出系列课程视频(14)

    UpdatePanel是ASP.NET AJAX中的一种控件,它允许页面的部分区域进行异步更新,而无需完全刷新整个页面,从而提高了用户体验。 课程可能会涵盖以下知识点: 1. **异步处理**:讲解ASP.NET AJAX如何通过...

    客户端 ajax asp.net ajax

    **客户端AJAX与ASP.NET AJAX** 客户端AJAX(Asynchronous JavaScript and XML)是Web开发中的一个技术,它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这种技术极大地提升了用户体验...

    ASP.NET—015:ASP.NET中无刷新页面实现

    ASP.NET 是微软开发的一种用于构建动态...总的来说,ASP.NET中的无刷新页面实现主要依赖于AJAX技术和UpdatePanel控件,它使得Web应用更加高效且用户友好。掌握这一技术,对于开发响应快速、交互性强的Web应用至关重要。

    asp.net Ajax 安装文件

    1. **UpdatePanel**:这是ASP.NET AJAX中最常用的控件,它允许在不刷新整个页面的情况下更新网页的一部分。UpdatePanel内部的操作会在服务器端执行,然后将结果返回到客户端,更新对应的HTML部分。 2. **...

    ASP.NET Ajax技术文档

    1. UpdatePanel:这是ASP.NET AJAX中最常见的控件,它允许在后台异步处理服务器端事件,而无需完整页面生命周期。UpdatePanel内的控件更新不会触发整个页面的回发,而是通过XMLHttpRequest发送请求,服务器返回更新...

    asp.net Ajax控件

    在描述中提到的,如评分功能、无刷新验证用户名以及ajax级联菜单等,都是ASP.NET AJAX控件实现的典型应用场景。 评分功能通常通过AJAX实现无刷新的星评系统,用户可以无需等待整个页面刷新即可完成评分,并实时显示...

    微软ASP.NET AJAX框架剖析

    【微软ASP.NET AJAX框架剖析】 ASP.NET AJAX框架是微软针对AJAX(Asynchronous JavaScript and XML)技术开发的一个全面的Web开发框架,旨在提供一个高效、易于使用的开发环境,以创建以用户为中心的Web应用程序。...

Global site tag (gtag.js) - Google Analytics