随笔-312  评论-12034  文章-2  trackbacks-256

阅读本文之前,您需要安装完成Microsoft ASP.NET AJAX v1.0 Beta以及Microsoft ASP.NET AJAX CTP Beta,其中后者依赖于前者,需要注意安装顺序(详见拥抱变化——AtlasASP.NET AJAX1):下载安装总览)。安装完成之后,Visual Studio中新建Web Site的时候会多出两个模版:ASP.NET AJAX Enabled Web SiteASP.NET AJAX CTP Enabled Web Site,其中前者是最基本的Microsoft ASP.NET AJAX v1.0 Beta站点,后者为基于前者的扩展,即Microsoft ASP.NET AJAX CTP Beta站点,包含了多个附加的控件(这些也都在原有的Atlas中)。顺便提一下,Microsoft.Web.Extensions.dll,也就是Microsoft ASP.NET AJAX v1.0 BetaDLL在安装过程中将被自动添加到了GAC中,这也正是新建ASP.NET AJAX Enabled Web Site之后该站点的bin文件夹为空的原因。而Microsoft.Web.Preview.dll,也就是Microsoft ASP.NET AJAX CTP BetaDLL没有添加在GAC中,所以新建了ASP.NET AJAX CTP Enabled Web Site之后,bin文件夹下会包含该DLL

接下来的内容均将基于一个新建的ASP.NET AJAX Enabled Web Site

ASP.NET AJAX中,ScriptManager控件依然作为最核心的组件存在于页面中,负责将客户端实现Ajax功能的JavaScript脚本发送至浏览器。但从AtlasASP.NET AJAX的过程中,ScriptManager的变化却可以称得上是改头换面,几乎颠覆了我们所熟悉的所有的从前的AtlasScriptManager的概念。

ASP.NET AJAX的客户端脚本库文件均大大减小,看来微软确实意识到了Atlas的不足:

  1. MicrosoftAjax.js   67KB
  2. MicrosoftAjaxRuntime.js   15KB
  3. MicrosoftAjaxWebForms.js    32KB
  4. PreviewDragDrop    42KB
  5. PreviewGlitz.js    14KB
  6. PreviewScript.js    183KB

其中前三者为Microsoft ASP.NET AJAX v1.0 Beta中的核心脚本库,后三个为Microsoft ASP.NET AJAX CTP Beta中的附加脚本库。注意到AtlasCompact.js和AtlasCompact2.js这两个浏览器兼容层文件都没有了,一切都集成在了MicrosoftAjax.js中。

注意:本文内容很多均为我今晚学习的个人见解,尚未经过完善的验证,并在文中也提出了许多问题,希望朋友们能够帮助解决。

让我们从声明ScriptManager的标签开始逐一说明其变化:

<asp:ScriptManager>标签

首先需要注意的是原有的“altas”前缀被改为了“asp”。据说是为了和现有的ASP.NET“无缝”对接,我却不以为然,毕竟不同的前缀更易于区分。

添加一个最简单的<asp:ScriptManager>之后,将有3个脚本通过axd资源文件引入到客户端:MicrosoftAjax.jsMicrosoftAjaxWebForms.js以及一个另外JavaScript文件(问题:这是什么东西?到底有什么用?)。

另外一个问题是,这个精简版本的MicrosoftAjaxRuntime.js应该如何使用?<asp:ScriptManager>标签中似乎并没有提供使用该脚本的设定选项?难道只能手工引入么?

放下这两个问题,看一下<asp:ScriptManager>标签所支持的属性:

  1. AllowCustomError:在异步更新发生异常时是否使用Web.config<customErrors>这一节的设定。<customErrors>中可以指定应用程序级别的错误处理页面,如果我们比较懒,则可以设定该属性为true,让发生异常后和普通ASP.NET程序一样重定向至某个专门显示错误的页面。一般来讲,最好设置其为false,因为这是Ajax程序,页面跳转是我们应该竭力避免的。
  2. AsyncPostBackErrorMessage:异步更新发生异常时发送给客户端的错误信息,可以在AsyncPostBackError事件的处理函数中根据异常的不同而动态设定该信息。然后客户端Web Form框架就可以格式化并显示给用户,这也是我推荐的Ajax异常处理方式。
  3. AsyncPostBackTimeout:异步更新的超时时限,单位为秒,默认值为90。没啥多说的,没事就别改了。
  4. EnablePartialRendering:(终于看到一个在Atlas中曾经有的属性了,好激动……)是否支持页面局部更新,默认值改为true,这样在用UpdatePanel的时候就不必每次都要留意设置ScriptManager的该属性了,不过也自然地带来了效率上的轻微影响。究竟何种方式最好,也是谓仁者见仁,智者见智的问题。
  5. ScriptMode:指定使用客户端脚本的版本(Debug或者Release),该属性的设置结果同样受制于配置文件中retail相关设置,详请参考http://ajax.asp.net/docs/mref/332fcb41-e4ab-4c1f-bb5e-61b49035af74.aspx 。需要注意的是对于自定义脚本,若该属性设置为Debug或程序实际运行时被认为需要加载Debug版本的脚本,则脚本文件名将自动添加一个“debug”部分,例如“myjs.js”将自动变为“myjs.debug.js”。(显得有些怪异,预先约定太多了,或许不是一件好事)
  6. ScriptPath:这个属性让我非常郁闷!官方的解释是“作为所有脚本文件的根目录(全局路径)”。按照我现在的理解,该属性旨在方便地替换掉现有的某个版本的脚本,而不必在每个<asp:ScriptReference>中逐一更改。当我们设定了该属性之后,比如设定为“~/dflying”,则客户端脚本的引用方式就会变成“<script src="~dflying/Microsoft.Web.Extensions/1.0.61025.0/Microsoft.Web.Resources.ScriptLibrary.MicrosoftAjax.debug.js" type="text/javascript"></script>”这样的静态脚本引用,而不是默认的通过axd资源得到,格式为“ScriptPath+程序集名+版本号+脚本文件名”。这样如果我们对框架自带的某个脚本进行了修改,则可以使用这种方法将修改后的新版本JavaScript文件引入到程序中,而且,这种静态文件的引用方法还不知不觉地提高了程序的执行效率。
  7. OnAsyncPostBackError:指定AsyncPostBackError事件的服务器端处理函数,在该处理函数中我们可以得到引发的异常,并根据不同的异常设置不同的AsyncPostBackErrorMessage,给用户足够友好的提示。
  8. OnResolveScriptReference:指定ResolveScriptReference事件的服务器端处理函数,在该处理函数中我们可以修改某一条脚本的相关信息,例如路径,名称,版本(Debug或者Release)等。

 

接下来让我们看看<asp:ScriptManager>标签中的各种子标签的变化:

<ErrorTemplate>标签

整个删除。因为有了AsyncPostBackErrorMessage属性、OnAsyncPostBackError事件以及客户端Web Form框架,所以我们开发者可以极其灵活地完全定制异常的显示界面,而不用局限在原有的<ErrorTemplate>中。

ASP.NET AJAX中默认的异步更新异常的显示界面就是一个简单的JavaScript alert()对话框。


<asp:ScriptReference>
标签

<asp:ScriptReference>标签包含在<Scripts>标签中,用来为页面引入一个客户端JavaScript脚本。如果程序中需要使用Microsoft ASP.NET AJAX CTP Beta中的附加脚本,或是我们自己编写的自定义脚本,则应该使用该标签引入。<asp:ScriptReference>标签中移除了ScriptName枚举的支持,目前支持如下属性

  1. Assembly:要引用的脚本所嵌入的程序集。
  2. Name:嵌入到程序集中的某个脚本的资源名称。以上两个属性通常成对使用,例如:<asp:ScriptReference Name="Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.js"  Assembly="Microsoft.Web.Preview" />,就引入了Microsoft.Web.Preview.dll中的名为Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.jsJavaScript资源。
  3. Path:通过路径指定将要引用的自定义脚本文件。
  4. ScriptMode:作用同<asp:ScriptManager>标签中同名属性的定义,并将覆盖其中的设定。同样需要注意的是,若该属性设置为Debug或程序实际运行时被认为需要加载Debug版本的脚本,则脚本文件名将自动添加一个“debug”部分,例如“myjs.js”将自动变为“myjs.debug.js”。
  5. IgnoreScriptPath:是否忽略掉<asp:ScriptManager>标签中ScriptPath属性的定义。

 

<asp:ServiceReference>标签

移除了GenerateProxyOnScriptLoadType这三个鸡肋属性。留下的只有如下两个:

  1. InlineScript:是否将这个Proxy内联到页面中,内联到页面中将省去一次HTTP连接,某种程度上将略微加快程序的初始化速度。
  2. PathWeb Service的文件路径。

 

<AuthenticationService>标签

  1. Path:验证服务的文件路径。

 

<ProfileService>标签

  1. Path:用户个性化服务的文件路径。
  2. LoadProperties:将内联到页面中的用户个性化属性。

对于<AuthenticationService><ProfileService>标签,似乎分别和AuthenticationServiceManagerProfileServiceManager有关,同样将用于客户端Web Form模型中……今晚没有足够时间就不再深入研究了。问题:这两个东西到底怎么用?朋友们如果了解的话也请告诉我。

 

后记

时间仓促,行文有些草率,并没有过多润色,自然很多地方将会比较难懂,还请各位朋友海涵!由于我也是从头再来开始接触,一定会有很多错误之处,也请各位不吝批评指教,或者讨论分享心得!

感谢大家对我的支持!

posted on 2006-10-25 00:35 Dflying Chen 阅读(7571) 评论(47)  编辑 收藏 网摘 所属分类: ASP.NET AJAX (Atlas)

评论:
#1楼 2006-10-25 00:49 | 丁晓全[未注册用户]
非常感谢你的贡献啊,我E文不好,只有看你们的了,加油啊,谢谢了
  回复  引用    
#2楼 2006-10-25 01:04 | cathsfz      
ScriptMode:我设置为debug,然后我的部分<asp:ScriptReference>是path式引用(非assembly式引用),没有.debug.js,也能正确引用,这东西看起来有一定智能,或者仅针对assembly式引用。

ScriptPath:这应该是用于版本控制的。据说flickr的网站实现了每日构建,实现的方式是每天的build自动放到一个新的目录里面,然后通过url rewrite将网站指向最新的build。好处是如果最新的build有问题,可以马上通过改变url rewrite的配置换回旧的build,而这不涉及实质的文件移动。普通ASP.NET文件按类似方式实现每日构建没问题,但axd不能如此,axd必然引用dll里编译好的,所以ScriptPath为上述构建方式提供的便利。

  回复  引用  查看    
#3楼 2006-10-25 01:19 | Jeffrey Zhao      
@cathsfz
似乎利用ScriptPath的确可以做到这样。
另外,由于WebResources.axd无法缓存,所以用现在ScriptManager的一些方法可以把静态文件给缓存起来。

  回复  引用  查看    
#4楼 2006-10-25 01:56 | Jeffrey Zhao      
MicrosoftAjaxRuntime.js只是提供了Microsoft Ajax Library对于Javascript的扩展,面向对象功能,Array的扩展等等,可以被单独引用在别的项目中的,它已经被完全包含在MicrosoftAjax.js里了。我翻了翻ScriptManager的代码,没有发现引用MicrosoftAjaxRuntime.js的代码。

至于你说的第三个文件,就更加奇怪了……看代码的话有很多很奇怪的比如RemoveCssClass,SetElementHeight方法,完全是函数定义,而且似乎根本没有在其它js里被调用过。另外不论在Debug还是Release下,这个文件的内容总是非常工整的。不过最奇怪的就是,在Microsoft.Web.Extensions.dll中找不到这个资源,它是从哪里来的?看来要详细看一下ScriptManager代码才行了……

  回复  引用  查看    
#5楼 2006-10-25 02:09 | jailu      
可以占个位吗?呵呵
  回复  引用  查看    
#6楼 2006-10-25 02:37 | 刚刚      
又是高手讲解提问高手答!
  回复  引用  查看    
#7楼 2006-10-25 09:06 | ∈鱼杆      
反正长见识
  回复  引用  查看    
#8楼 2006-10-25 09:15 | 丁晓全[未注册用户]
看的不是太懂 ,再写的通俗点 呵呵,弄点完整的例子放上来嘛
  回复  引用    
#9楼[楼主] 2006-10-25 09:34 | Dflying Chen      
http://cathsfz.cnblogs.com/" target=_blank>cathsfz:
关于ScriptMode,我做了如下实验:
我的ScriptManager的Debug模式定义如下,其中分别引用了一个Assembly和一个文件的脚本:
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
    
<Scripts>
        
<asp:ScriptReference Name="Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.js"  Assembly="Microsoft.Web.Preview" />
        
<asp:ScriptReference Path="myjs.js" />
    
</Scripts>
    
<AuthenticationService Path="" />
    
<ProfileService LoadProperties="" Path="" />
</asp:ScriptManager>
这样生成的HTML如下:
<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=jZ0jusc_2il243NC0zfxWBlLjA6tiYjww4UtYo1uBKOyyG32c2-xSnK6C_Byk2_1b7c38ntv3BrKGB8THUWzf7k7RVxHpZMWZbtmduq_5DaYvsDS74AKj5R0Or8jnW4p0&amp;t=632969592160000000" type="text/javascript"></script>
<script src="myjs.js" type="text/javascript"></script>
 
但是如果将msjs.js这个ScriptReference的ScriptMode也设置为Debug,也就是:
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
    
<Scripts>
        
<asp:ScriptReference Name="Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.js"  Assembly="Microsoft.Web.Preview" />
        
<asp:ScriptReference Path="myjs.js" ScriptMode="Debug" />
    
</Scripts>
</asp:ScriptManager>
那么HTML将变成:可以看到msjs.js变成了msjs.debug.js
<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=jZ0jusc_2il243NC0zfxWBlLjA6tiYjww4UtYo1uBKOyyG32c2-xSnK6C_Byk2_1b7c38ntv3BrKGB8THUWzf7k7RVxHpZMWZbtmduq_5DaYvsDS74AKj5R0Or8jnW4p0&amp;t=632969592160000000" type="text/javascript"></script>
<script src="myjs.debug.js" type="text/javascript"></script>
 
若ScriptManager的ScriptMode为Release,且myjs.js的ScriptMode为Debug,如下:
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release">
    
<Scripts>
        
<asp:ScriptReference Name="Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.js"  Assembly="Microsoft.Web.Preview" />
        
<asp:ScriptReference Path="myjs.js" ScriptMode="Debug" />
    
</Scripts>
</asp:ScriptManager>
将仍得到msjs.debug.js: 
<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=jZ0jusc_2il243NC0zfxWBlLjA6tiYjww4UtYo1uBKOyyG32c2-xSnK6C_Byk2_1b7c38ntv3BrKGB8THUWzf7k7RVxHpZMWZbtmduq_5DaYvsDS74AKj5R0Or8jnW4p0&amp;t=632969592160000000" type="text/javascript"></script>
<script src="myjs.debug.js" type="text/javascript"></script>
 
 也就是说,似乎ScriptManager的ScriptMode只能控制Assembly中的脚本的类型,而对于自定义的文件脚本,则还是需要在ScriptReference中控制?不知道这样理解对不对?
 
 

  回复  引用  查看    
#10楼[楼主] 2006-10-25 09:45 | Dflying Chen      
http://cathsfz.cnblogs.com/" target=_blank>cathsfz
继续说ScriptPath,类似上面的,有这样的ScriptManager定义:
<asp:ScriptManager ID="ScriptManager1" runat="server">
    
<Scripts>
        
<asp:ScriptReference Name="Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.js"  Assembly="Microsoft.Web.Preview" />
        
<asp:ScriptReference Path="myjs.js" />
    
</Scripts>
</asp:ScriptManager>
生成了如下的HTML:
<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=etQdMWykBMF0OK9d-n8XuA2&amp;t=632964784462164217" type="text/javascript"></script>


<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=JdcsQIJ1QFOpV0y4vhpTaFRB_2ORvuJ3lz_sg_oq4KbSF-WKp75eeuy7AiW0KD6HrfWyy2qN-AGC1Ysyx-TpalVqWrAmjj5nCsiZFTA2JT9DqlpcIXLCOc6suSl4Q5icUH-arJTwV2z7x7idZrito_QrF8N2sHtWOPiDrN4JJdY1&amp;t=632973643612789452" type="text/javascript"></script>
<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=JdcsQIJ1QFOpV0y4vhpTaFRB_2ORvuJ3lz_sg_oq4KbSF-WKp75eeuy7AiW0KD6HrfWyy2qN-AGC1Ysyx-TpalVqWrAmjj5nCsiZFTA2JT9DqlpcIXLCOc6suSl4Q5icWJ1qKeijZGCiy6eOzGcbJeQUWvMg7fw4blwiU6GuJK81&amp;t=632973643612789452" type="text/javascript"></script>
<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=jZ0jusc_2il243NC0zfxWBlLjA6tiYjww4UtYo1uBKOyyG32c2-xSnK6C_Byk2_1b7c38ntv3BrKGB8THUWzf7k7RVxHpZMWZbtmduq_5DaYvsDS74AKj5R0Or8jnW4p0&amp;t=632969592160000000" type="text/javascript"></script>
<script src="myjs.js" type="text/javascript"></script>
 
但是如果ScriptManager加上了一个ScriptPath:
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptPath="~/dflying">
    
<Scripts>
        
<asp:ScriptReference Name="Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.js"  Assembly="Microsoft.Web.Preview" />
        
<asp:ScriptReference Path="myjs.js" />
    
</Scripts>
</asp:ScriptManager>
那么HTML将变成:
<script src="/AJAXCTPEnabledWebSite1/WebResource.axd?d=etQdMWykBMF0OK9d-n8XuA2&amp;t=632964784462164217" type="text/javascript"></script>


<script src="dflying/Microsoft.Web.Extensions/1.0.61025.0/Microsoft.Web.Resources.ScriptLibrary.MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="dflying/Microsoft.Web.Extensions/1.0.61025.0/Microsoft.Web.Resources.ScriptLibrary.MicrosoftAjaxWebForms.debug.js" type="text/javascript"></script>
<script src="dflying/Microsoft.Web.Preview/1.0.61025.0/Microsoft.Web.Resources.ScriptLibrary.PreviewGlitz.debug.js" type="text/javascript"></script>
<script src="myjs.js" type="text/javascript"></script>
 
可以看到所有的Assembly脚本饮用都变成了文件形式的引用。这样做有什么好处呢?难道这就能够实现版本控制?恩,或许可以,不过肯定需要很多额外的步骤,光是维护这个文件结构就不容易。
 
 

  回复  引用  查看    
#11楼[楼主] 2006-10-25 09:48 | Dflying Chen      
@Dflying Chen
文中有一个typo,所有的msjs.js应该改为myjs.js,msjs.debug.js应该改为myjs.debug.js。

  回复  引用  查看    
#12楼[楼主] 2006-10-25 09:50 | Dflying Chen      
@Jeffrey Zhao
确实可以用ScriptPath实现某种程度上的缓存,但是为什么采用了这样一种晦涩的设计方式呢?

  回复  引用  查看    
#13楼[楼主] 2006-10-25 09:51 | Dflying Chen      
@Jeffrey Zhao
关于MicrosoftAjaxRuntime.js,确实比较郁闷,难道ScriptManager就没有办法对其进行引用么?如果我的页面不需要那么多AJAx功能,只要这个最基本的呢?只能手工使用?为什么微软提供了这个脚本,却不让我们方便地使用呢?

  回复  引用  查看    
#14楼[楼主] 2006-10-25 09:54 | Dflying Chen      
Jeffery,那个规整的JS代码如下,一起研究一下吧:

  回复  引用  查看    
#15楼[楼主] 2006-10-25 09:55 | Dflying Chen      
@cathsfz
@Jeffrey Zhao
谢谢二位的参与讨论,受益匪浅!期盼继续!!

  回复  引用  查看    
#16楼[楼主] 2006-10-25 09:56 | Dflying Chen      
@丁晓全
谢谢支持!

  回复  引用  查看    
#17楼[楼主] 2006-10-25 09:56 | Dflying Chen      
@jailu
@刚刚
@∈鱼杆
我希望各位朋友可以参与到讨论中来,这样才能更快地进步!

  回复  引用  查看    
#18楼[楼主] 2006-10-25 09:58 | Dflying Chen      
@丁晓全
这个系列的文章是写给有足够的Atlas基础的朋友看的,语言确实比较晦涩,也没有仔细润色过。最主要的原因是没有足够的时间,花了太多在研究上……以后我会注意的。

  回复  引用  查看    
#19楼 2006-10-25 10:50 | 紫天连水      
占个位置!
  回复  引用  查看    
#20楼[楼主] 2006-10-25 11:27 | Dflying Chen      
@紫天连水
恩,讨论一下吧,发表点看法也好啊!

  回复  引用  查看    
#21楼 2006-10-25 11:44 | Jeffrey Zhao      
@Dflying Chen
这个文件的编写其实根本不是ASP.NET AJAX的样式,这个文件的风格很像使用ASP.NET以前的Validator时被引入的文件,它们也是有大量的function WebForm_XXXX,也是不管怎么样都非常工整的。所以我找了一下System.Web.dll,结果发现那个js是System.Web.dll里的WebForm.js文件。然后我看看ScriptManager的代码,发现它的PreRender方法里有这么一段代码:

if (!this.IsInAsyncPostBack && this.EnablePartialRendering)
{
this.Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this, null, null, false, false, false, false, true, null));
}

这个应该就是引入那个文件的原因了,试验了一下,EnablePartialRendering设为false的确不会出现那个文件的引用了。所以这个文件应该还是为PartialRendering服务的。

不过目前只知道这个文件是给以前的ASP.NET实现异步PostBack Event的,为什么这里要出现还必须进一步研究……

  回复  引用  查看    
#22楼[楼主] 2006-10-25 11:59 | Dflying Chen      
@Jeffrey Zhao
Great Work!
真不错,有些豁然开朗的感觉啊!真是谢谢你!有什么新进展了再来指点一下!

  回复  引用  查看    
#23楼 2006-10-25 12:53 | 刚刚      
ASP.NET AJAX一般性的无刷新功能和ATLAS好像是一样的使用方法,但调用本地Web Services不知道为什么怎么也不认识在JavaScript中所写的本地Web Service名字,并且连原来在ATLAS中可以使用的“$”符号(此符号等同于document.getElementById)也不识别了。不知道是我引用的ScriptManager没有被程序认出来(无刷新功能都好着呢呀),还是ASP.NET AJAX将缩写符号去掉了,或者是还需要其他什么设置或代码!
  回复  引用  查看    
#24楼 2006-10-25 13:48 | cathsfz      
@Jeffrey Zhao
根据我看到过的资料,WebResource.axd引用是可以被缓存的。WebResource.axd的QueryString里面的d是用来指示使用哪个资源,而t则是一个time stamp,这个time stamp指的就是dll最后一次被编译的时间。所以,只要dll不被重新编译,time stamp也就不会改变,浏览器也就应该根据地址缓存数据。(到底是否缓存未经亲自证实。)

  回复  引用  查看    
#25楼 2006-10-25 13:51 | cathsfz      
@刚刚
$()已经改名为$get()了,官方解释是为了当你既需要使用Atlas又需要使用第三方框架(例如prototype)时不会引起冲突。

  回复  引用  查看    
#26楼[楼主] 2006-10-25 15:29 | Dflying Chen      
@刚刚
cathsfz的解释是正确的!非常感谢!

  回复  引用  查看    
#27楼[楼主] 2006-10-25 15:30 | Dflying Chen      
@cathsfz
确实如此,浏览器会自动缓存WebResource.axd文件的。

  回复  引用  查看    
#28楼 2006-10-25 16:08 | 大剑师      
变化这么大,干脆我等正式版本了,目前用的就不换了
  回复  引用  查看    
#29楼 2006-10-25 16:34 | 刚刚      
@Dflying Chen
恩,我已经用了,可是用ATLAS的方法调用本地WebService时,这个家伙就是不认识我的WebService。你们帮忙看看代码吧,哪里错了或者还需要添加什么,如何做?
 1……
 2        <asp:ScriptManager ID="SM1" runat="server" AllowCustomErrors="False" EnablePartialRendering="true">
 3            <Services>
 4                <asp:ServiceReference Path="AjaxService.asmx" />
 5            </Services>
 6        </asp:ScriptManager>
 7……
 8            <div id="TitleDiv3" style="color:Yellow;">3、无刷新调用本地WebService</div>
 9            <div id="ContentDiv3" style="font-family:宋体;">
10            <input id="TextBox4" type="text" />
11            <input id="TextBox5" type="text" />
12            <input id="Button3" type="button" value="Button" onclick="return BtnonClick()" />
13            </div>
14……
在<head>节中的JavaScript为:
运行时告诉我“AjaxService”未定义。
不知道ASP.NET AJAX在这方面改变成什么了呢,又要如何做?

  回复  引用  查看    
#30楼 2006-10-25 17:31 | MK2      
@cathsfz
呵呵,太好了,可以用自己之前基于Prototpye.js写的Js脚本库了````

  回复  引用  查看    
#31楼 2006-10-25 17:52 | haiyin[未注册用户]
@刚刚
AjaxService.asmx我这样定义的。没有任何问题啊。

[Microsoft.Web.Script.Services.ScriptService]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class AjaxService : System.Web.Services.WebService
{
public AjaxService()
{
}


[WebMethod]
public string HelloName(string keycon)
{
return keycon;
}
}

  回复  引用    
#32楼 2006-10-25 18:39 | 刚刚      
@haiyin
请问您是用的Atlas还是ASP.NET AJAX呢?
我在Atlas里也没有问题的,我想是不是ASP.NET AJAX有什么不同了!

  回复  引用  查看    
#33楼 2006-10-25 18:54 | 刚刚      
@haiyin
谢谢,我注意到了您说的变化了:就是[Microsoft.Web.Script.Services.ScriptService]
这句要在Web Services头上加上。所以最后我的Web Services是如下(注意添加第11行的代码,其他不变,呵呵……):
这样客户端就能调用本地Web Services了。呵呵,万分感谢您!

  回复  引用  查看    
#34楼[楼主] 2006-10-25 20:17 | Dflying Chen      
@刚刚
问题解决了就好!我也学到了不少!

  回复  引用  查看    
#36楼[楼主] 2006-10-26 02:07 | Dflying Chen      
@刚刚
谢谢,但是我觉得这些文档似乎组织的并不是很好,看完之后难以有清晰的概念。

  回复  引用  查看    
#37楼 2006-10-26 10:50 | 刚刚      
@Dflying Chen
你说的非常对,我很赞同,所以大家都在等待你们的系列讲述或文章,期待……

  回复  引用  查看    
#38楼[楼主] 2006-10-26 11:03 | Dflying Chen      
@刚刚
我写得也不好,毕竟时间太少了。不过我希望能够在组织结构上稍微清晰一点!

  回复  引用  查看    
#39楼 2006-10-26 11:14 | 刚刚      
@Dflying Chen
大家共同努力!(欢迎学习ASP.NET AJAX和.NET技术的各界朋友加入qq群号:3035996)

  回复  引用  查看    
#40楼 2006-10-28 12:30 | cathsfz      
@Dflying Chen
关于那个版本控制的问题,其实build不一定就是指把js以资源的形式放进dll里面,仅仅是完成js压缩并把js放到指定目录也算是build,这两者没什么区别,后者不需要WebResource.axd的处理或许效率更高一些。

Atlas本身采用前一种方式的build,可能是为了方便的可再发布。而如果网站的build使用后一种方式,则立刻可以实现版本控制了。

  回复  引用  查看    
#41楼[楼主] 2006-10-28 16:29 | Dflying Chen      
@cathsfz
您说的意思我懂了,但是难道实现版本控制只要修改JavaScript就好了么?如果需要修改ASPX,那么这种办法岂不是还是不能用?我们岂不是还要再想出一套别的能够控制ASPX的版本控制方法?
这种一半的解决方案有什么用呢?

  回复  引用  查看    
#42楼 2006-12-01 09:34 | cw[未注册用户]
求救: 页面提交时出现运行时错误: 'WebForm_PostBackOptions' 未定义???

Microsoft JScript 运行时错误: 'WebForm_PostBackOptions' 未定义

VS2005我在本地测试时正常, 但上传到服务器上后就出现在这个问题,
我想查询这个WebForm_PostBackOptions函数在哪里定义, 竟然查遍了
整个工程, 也找不到这个脚本函数, 晕.

这是什么原因???

谢谢!!!

  回复  引用    
#43楼[楼主] 2006-12-01 13:34 | Dflying Chen      
@cw
你看看Atlas脚本有没有发送到客户端呢?
估计就是这个问题

  回复  引用  查看    
#44楼 2007-03-23 09:54 | laron[未注册用户]
更新失败可以自定义弹出错误信息,但如何在更新成功时也弹出自定义信息,像Javascript的alert('更新成功');等之类的,不知该语句加在哪才会触发?
  回复  引用    
#45楼[楼主] 2007-03-23 10:47 | Dflying Chen      
@laron
可以在UpdatePanel里面写入JavaScript,也可以侦听客户端PageRequestManager的相关事件

  回复  引用  查看    
#46楼 2007-04-03 22:47 | asd[未注册用户]
sdfsf
  回复  引用    
#47楼 2009-04-28 16:28 | 菜鸟果果[未注册用户]
使用ajax的页面太大,怎么让它减小点?
  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 538962




相关文章:

相关链接: