ASP.NET AJAX 1 Beta的PageMethods限制
October 24, 2006
今天安装了ASP.NET AJAX 1.0 Beta(见微软发布ASP.NET AJAX 1.0 Beta版),并把一个用到Atlas CTP的项目进行了修改与迁移。迁移并不复杂,只要照着Migration Guide(Doc格式)做就行了。
当然也发现了一些问题。最令人意外的是PageMethods不能正常使用了,这应该是Beta的一个BUG。要正常使用PageMethods,请:
- 给要使用的方法加上 Microsoft.Web.Script.Services.ScriptMethod 修饰;
- 该方法必须为public和static的;
- 该方法不能直接使用当前page的controls;
- 该方法不能放在codebehind文件中,而是必须放在aspx文件中(真变态,这应该是BUG的源头,前3个都是PageMethods的正常要求)。
<script runat="server"> [System.Web.Services.WebMethod] [Microsoft.Web.Script.Services.ScriptMethod] public static string HelloWorld() { return "hello world"; } </script>



有用这东东开发出来的DEMO看看吗?
to 三皮:我已经在welan.com的refactoring过程中使用Beta了(事实是早就开始用Atlas了,上周升级至Beta),不过实际上线,可能还要等一两个月。到时给你看看。如果你迫切想看Demo,而ajax.asp.net及其他网站提供的演示不能满足你的要求,我可以写几个给你:)
呵呵,我倒不是很急,先去ajax.asp.net看看吧。
< %@ Page Language="VB" %>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
为什么总是提示PageMethods未定义..?
Metaza: 你需要在页面上放置一个ScriptManager,比方说在form1下一行添加:
“http://flight.varig.com.cn
http://flight.srilankan.com.cn
http://flight.flexpricer.com
http://www.piaowuvip.com“
我也碰到这个问题,但是照你的方法做了,却仍然不行.
<asp:ScriptManager ID=”ScriptManager1″ EnablePageMethods=”true” runat=”server”/>
<script runat=”server”>
[System.Web.Services.WebMethod]
public static string HelloWorld()
{
return “hello world”;
}
客户端:
<script language =”javascript” type=”text/javascript” >
<!–
function sayHell0()
{
PageMethods.returnStr(”Xiang”,CallBackData);
}
function CallBackData(result)
{
alert(result);
}
–>
</script>
该方法放在codebehind文件中可,放在aspx文件中也可!
PageMethods.returnStr(”Xiang”,CallBackData);
应改为:
PageMethods.HelloWorld(CallBackData);
特别注意:EnablePageMethods=”true”
cshxiang:时过境迁,ASP.NET AJAX 1正式版跟Beta 1又有了你说的区别和改进:)