ASP.NET AJAX 1 Beta的PageMethods限制

October 24, 2006 Tags: , , ,

今天安装了ASP.NET AJAX 1.0 Beta(见微软发布ASP.NET AJAX 1.0 Beta版),并把一个用到Atlas CTP的项目进行了修改与迁移。迁移并不复杂,只要照着Migration Guide(Doc格式)做就行了。
当然也发现了一些问题。最令人意外的是PageMethods不能正常使用了,这应该是Beta的一个BUG。要正常使用PageMethods,请:

  1. 给要使用的方法加上 Microsoft.Web.Script.Services.ScriptMethod 修饰;
  2. 该方法必须为public和static的;
  3. 该方法不能直接使用当前page的controls;
  4. 该方法不能放在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>

12 Comments on “ASP.NET AJAX 1 Beta的PageMethods限制”

  1. 三皮 at 6:47 am on November 2nd, 2006

    有用这东东开发出来的DEMO看看吗?

  2. ash at 9:20 am on November 2nd, 2006

    to 三皮:我已经在welan.com的refactoring过程中使用Beta了(事实是早就开始用Atlas了,上周升级至Beta),不过实际上线,可能还要等一两个月。到时给你看看。如果你迫切想看Demo,而ajax.asp.net及其他网站提供的演示不能满足你的要求,我可以写几个给你:)

  3. 三皮 at 1:23 pm on November 2nd, 2006

    呵呵,我倒不是很急,先去ajax.asp.net看看吧。

  4. Metaza at 1:54 am on December 10th, 2006

    < %@ Page Language="VB" %>

    < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">








    为什么总是提示PageMethods未定义..?

  5. ash at 3:17 am on December 11th, 2006

    Metaza: 你需要在页面上放置一个ScriptManager,比方说在form1下一行添加:

  6. 酒店预订 at 9:14 am on April 12th, 2007

  7. aa at 6:37 am on April 19th, 2007

    我也碰到这个问题,但是照你的方法做了,却仍然不行.

  8. cshxiang at 6:32 pm on June 4th, 2007

    <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>

  9. cshxiang at 6:34 pm on June 4th, 2007

    该方法放在codebehind文件中可,放在aspx文件中也可!

  10. cshxiang at 6:38 pm on June 4th, 2007

    PageMethods.returnStr(”Xiang”,CallBackData);
    应改为:
    PageMethods.HelloWorld(CallBackData);

  11. cshxiang at 6:39 pm on June 4th, 2007

    特别注意:EnablePageMethods=”true”

  12. ash at 4:22 am on June 6th, 2007

    cshxiang:时过境迁,ASP.NET AJAX 1正式版跟Beta 1又有了你说的区别和改进:)

Leave a Reply