Scott Guthrie 博客中文版

Scott Guthrie's Blog on ASP.NET and .NET (英文原版地址:http://weblogs.asp.net/scottgu)
随笔 - 180, 评论 - 1018, 引用 - 442

导航

工具

标签

每月存档

广告



访客

 

【原文地址】 Gotcha: Don't use <xhtmlConformance mode="Legacy"/> with ASP.NET AJAX
【原文发表日期】 Sunday, December 10, 2006 9:39 PM

最近,我帮过几个开发人员,他们遇上了一些古怪的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兼容的标识 (注:你可以从这篇优秀的MSDN文章中进一步了解ASP.NET 2.0 中标准兼容的情况)。

但在早期的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会在你的网站上正常工作。

希望本文对你有所帮助,

Scott

相关文章

打印 | 张贴于 2006-12-12 13:09:00 | Tag:ASP.NET  .NET  Visual Studio  Atlas  Tips and Tricks

留言反馈

#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
但是我去掉那行后,会出现另外的问题
2007-11-16 14:08:00 | [匿名用户:搜索引擎优化]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
但是我去掉那行后,会出现另外的问题
2007-11-16 14:08:00 | [匿名用户:搜索引擎优化]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
但是我去掉那行后,会出现另外的问题
2007-11-16 14:08:00 | [匿名用户:搜索引擎优化]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
但是我去掉那行后,会出现另外的问题
gridview表格无法正常显示(边框颜色没有了)!!
怎么解决呀!
2007-05-23 16:48:00 | [匿名用户:wolfe]
#xhtmlConformance 编辑
xhtmlConformance

2007-05-18 10:39:00 | [匿名用户:baikangwang]
#ASP.NET类综合引用收藏 编辑
综合引用
2007-03-28 21:24:00 | [匿名用户:webwalker]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
晕~~我把400多行得CONFIG文件一个行行得删了试验,试验到这个才知道出了问题。。要是早点发现你得文章就好了 汗~~
2007-01-25 20:41:00 | [匿名用户:品雨凉秋]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
你不要忽悠我哦,我真受不了你了啊啊啊啊啊啊啊
2006-12-15 09:42:00 | [匿名用户:医生]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
好人在那里呢?
2006-12-15 09:41:00 | [匿名用户:医生]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
你不要忽悠我哦
2006-12-15 09:41:00 | [匿名用户:医生]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
什么时候出正式版呀,都等不及了,kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkK
2006-12-13 11:33:00 | [匿名用户:LJS]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
什么时候出正式版呀
2006-12-13 11:32:00 | [匿名用户:LJS]
#回复: 疑难杂症:在ASP.NET AJAX中别使用&lt;xhtmlConformance mode=&quot;Legacy&quot;/&gt; 编辑
此问题是我发给Scott Guthrie的,当时他没有解决,而是指定他手下一个哥们帮我看看,不过在我发出去之后,就通过网络找到解决方案,发送给他。
早知道我自己写这个博了:)
2006-12-12 15:30:00 | [匿名用户:开心就好]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System