在ASP.NET AJAX中别使用mode=“Legacy”

最近,我帮过几个开发人员,他们遇上了一些古怪的javascript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现。问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> 。

假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJAX的话,请读下去,了解如何避免这个常见的疑难杂症。

症状:

当你往先前成功地从VS 2003 升级到VS 2005的项目中添加新的客户端JavaScript脚本时,你会看到奇怪的行为。在使用ASP.NET AJAX UpdatePanel 控件时,这个奇怪的行为有时会包括页面做整页 postback,而不仅是递增性的局部更新的情形。

当你打开你的web.config文件,你会看到其中的 <xhtmlConformance/> 元素,象这样:

<configuration>

<system.web>
<xhtmlConformance mode="Legacy" />
</system.web>

</configuration>
背景:

ASP.NET 1.0 和 1.1 中的许多服务器端控件并不输出与XHTML兼容的标识。ASP.NET 2.0 对此做了改变,在默认情形下,所有的服务器端控件都会输出与XHTML兼容的标识 。

但在早期的ASP.NET 2.0 beta 中我们注意到的一件事情是,当把客户应用升级时,其实,很多应用会假设页面输出并不是与XHTML兼容的。把我们服务器控件的默认输出改成与XHTML兼容的话,它有时会修改页面的视觉显示。为向后兼容的目的,我们添加了上面这个 <xhtmlConformance> 设置,允许开发人员可以设置控件以Legacy模式(即与ASP.NET 1.1一样,会输出非XHTML标识),或者Transitional 模式 (XHTML Transitional) ,或者 Strict 模式 (XHTML Strict)显示。

在默认情形下,当你使用VS 2003升级到VS 2005的Web项目移植向导时(无论是网站或 web 应用项目),你的web.config文件里会添有这个legacy配置。

解决方案:

除非你已知当你的网站以XHTML模式运行时会有问题(但你还没时间更正),我总是建议从你的web.config文件里去掉 <xhtmlConformance> 这部分,或者你也可以明确地将其设置为Transitional 或 Strict。

这将使得你的HTML输出是符合标准的,此外,这也将导致你的服务器控件的HTML输出是well formed,即, 开始标签和结束标签总是相匹配的。当你使用AJAX技术来动态替换你的页面上某些HTML元素的内容时,这尤其重要,否则的话,客户端JavaScript脚本有时会搞不清楚容器元素,导致出错。它也将确保ASP.NET AJAX会在你的网站上正常工作。

时间: 2024-09-20 18:53:13

在ASP.NET AJAX中别使用mode=“Legacy”的相关文章

在ASP.NET AJAX中别使用mode=Legacy

ajax|asp.net 最近,我帮过几个开发人员,他们遇上了一些古怪的javascript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJA

如何在ASP.Net Ajax中调用WebService

ajax|asp.net|web 今天我想实现利用javascript调用WebService我首先就想到了ASP.Net Ajax 因为微软的东西用着方便,我从网上看了看,这东西好多人都写了,我就从官方找了个Demo下了看看源代码,感觉没什么特殊的,于是动手开始写.先添加一个webservice.asmx然后在default.aspx中加入ScriptManager 并设置serviecs属性<asp:ScriptManager runat="server" ID="

Asp.net Ajax 中的脚本错误: Sys未定义 的解决方法

ajax|asp.net|错误|脚本|解决         提前祝大家新年好!前段时间日夜赶工,终于按计划推出了项目的新版本.今天终于有时间写点东西了.         前段时间公司同事在项目中引入了Asp.net Ajax (beta1)版. 用着用着,在查看网页时,不时报 'Sys'未定义 的错误.按照网上的办法对web.confg 做了一翻手术,一点效果也没有.想想也对,web.config跟本没改动过,凭什么突然就把问题都算在人家头上?经过一翻摸索后,突然发现,原来是身份验证惹的祸.在配

在ASP.NET AJAX中别使用mode=&amp;quot;Legacy&amp;quot;

[导读]假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJAX的话,需要了解如何避免文中提到的这个常见的疑难杂症. 开发人员遇上了一些古怪的JavaScript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现. 问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本

疑难杂症:在ASP.NET AJAX中别使用

ajax|asp.net 最近,我帮过几个开发人员,他们遇上了一些古怪的JavaScript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJA

分清ASP.NET AJAX中的Extender和Behavior模型

ASP.NET AJAX提出了多种模型,在客户端有Component.Control和Behavior模型,在服务器端有 ScirptControl和Extender模型.这些模型各有各的用途,但是请注意非常重要的一点:客户端模型和服 务器端模型是相互独立的. ASP.NET AJAX的重要组件之一是Ajax Control Toolkit,其中包括了大量 的Extender和Behavior.其中的Extender使用ASP.NET AJAX提出的Extender模型,在客户端使用了 Micr

探索ASP.NET AJAX中的消息传输模式(一)

在我们使用AJAX的应用中,消息传输有那些方式呢?纯文本.带HTML的文本.XML.JSON?还有??? 在许多情况下,纯文本的消息传输就足够了.例如,要传输一个用户名,用户密码,或是用户联系方法 (PHONE,EMAIL,MSN)等,通常都是以文本的形式传输的.又比如复杂点的数据信息,表格.对象或者是? ??,这样我们可以使用XML或是JSON来格式化数据后进行传输. 有这样一个AJAX的应用场合,提供一系列的标签连接,让用户任意选择,浏览器向服务器发送请求查 询得到想要的数据信息.下面就以这

使用Jquery应用到Asp.net ajax中时应该避免的3个误区

Ajax中使用json这个轻量级数据类型通信的好处相信大家已经很清楚,考虑到安全问题,Asp.net Ajax的webService使用json,应该防止Json Hijacking.因此通常我们的做法是在使用Post请求式,并将 请求的content-type设置成application/json; charset=utf-8.但客户端如果你使用的是Jquery,有三 个细节问题是我们应该注意的: 1 :如果我们Post时没有任何数据传给服务端,请指定Data:{} 如: Code 1 $.a

Asp.net Ajax中的脚本错误“Sys未定义”的解决方法

提前祝大家新年好!前段时间日夜赶工,终于按计划推出了项目的新版本.今天终于有时间写点东西了. 前段时间公司同事在项目中引入了Asp.net Ajax (beta1)版. 用着用着,在查看网页时,不时报 'Sys'未定义 的错误.按照网上的办法对web.confg 做了一翻手术,一点效果也没有.想想也对,web.config跟本没改动过,凭什么突然就把问题都算在人家头上?经过一翻摸索后,突然发现,原来是身份验证惹的祸.在配置了身份验证的网站中,访问未登录页面时,对Ajax脚本资源的访问被拒绝,转向