Atlas学习手记(9):异步调用Page Method

使用Atlas我们可以调用两种服务端的方法WebService MethodPage Method,在前面的使用中,我们一直都是调用WebService Method,如何去调用一个Page Method?本文将简单的介绍一下这一内容。

 

主要内容

1.如何调用Page Method

2.与WebService Method区别

 

一.如何调用Page Method

使用Atlas我们可以调用两种服务端的方法WebService MethodPage Method,在前面的使用中,我们一直都是调用WebService Method,如何去调用一个Page Method?本文将简单的介绍一下这一内容。

1.在页面的.cs文件中,我们先定义一个public的方法:

public string EchoString(string s)

{
    
return "Hello : " + s;
}

再为这个方法加上WebMethod的特性,注意这一切我们都是在普通的ASPX页面中书写,而不是在.ASMX中:

[System.Web.Services.WebMethod]

public string EchoString(string s)

{
    
return "Hello : " + s;
}

2.加入ScriptManager控件,这时候因为是Page Method,所以不再需要引入Web Service

<atlas:ScriptManager ID="ScriptManager1" runat="server">

</atlas:ScriptManager>

3.添加HTML控件

<div>

    
<h3>

        Enter your name:
<input id="inputName" />

        
<input id="buttonGo" type="button" value="GO" onclick="return OnbuttonGo_click()" />

    
</h3>

</div>

4.编写JS代码调用,注意PageMethods这个类,方法EchoString仍然没变,但它却属于PageMethods类,所有的页面暴露的Page Method都应该属于PageMethods

<script type="text/javascript" language="JavaScript">

    
function OnbuttonGo_click() 

    
{
        requestSimpleService 
= PageMethods.EchoString(

            document.getElementById('inputName').value,       
//params

            OnComplete    
//Complete event

            );

        
return false;
    }


    
function OnComplete(result) 

    
{
        alert(result);
    }


</script>

编译运行:

调用后:

二.与WebService Method区别

通过上面的例子大家可能看到了,似乎这种方式与调用WebService MethodPageMethods那儿有一点不同之外,其他的都差不多,为什么还会出现这种方式呢?现在如果我们需要在Web Method里面调用页面上的控件,那这种方式就很有价值了,对上面的例子作一下小小的改动,首先对TextBox加上runat=server属性,让它运行在服务端:

<input id="inputName" runat="server"/>

再修改Page Method如下:

[System.Web.Services.WebMethod]

public string EchoString()

{
    
return "Hello : " + this.inputName.Value;
}

调用的JS代码:

<script type="text/javascript" language="JavaScript">

    
function OnbuttonGo_click() 

    
{
        requestSimpleService 
= PageMethods.EchoString(

            OnComplete    
//Complete event

            );

        
return false;
    }


    
function OnComplete(result) 

    
{
        alert(result);
    }


</script>

运行后调用:


可以看到,在Page Method中,我们获取到了运行在服务端的TextBox的值。如果是在WebServer Method中,就不能再这样来实现了,这一点我想就是Page Method最大的价值吧。同时对于WebService MethodPage Method的工作原理也有很大的区别,看看Dflying Chen的解释:

对于Atlas调用Web Service来说,当请求被发送时候,仅仅简单传给服务器方法的参数数据。而对于Atlas调用Page Method来说,传输的数据将会很多,将把表单中所有的域,包括ViewState,一起传送到服务器。在服务器端,它的工作方式也和普通的PostBack很相似:在这个Page Method被调用前,所有的服务器控件将得到它自身的状态。这也正是为什么Page Method中可以访问页面中控件状态的原因

在实际使用中,我们也是尽可能多的使用WebService Method,只在必要的时候才使用Page Method

完整示例下载:http://files.cnblogs.com/Terrylee/PageMethodDemo.rar

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-07-31 11:17 TerryLee 阅读(4995) 评论(30)  编辑 收藏 所属分类: ASP.NET.NET Framework

  回复  引用  查看    
#1楼 2006-07-31 11:41 | aspnetx      
我有一个关于updatepanel的问题
updatepanel是还不支持webpart,因为我在做演练的时候,webpartmanager转换到design模式的时候,webpart无法拖拽,而把updatepanel在aspx文件里的标记注释掉后,也就是去掉updatepanel,一切就又都正常了.
是否还应该加入一些其它的什么东西呢?
谢谢!
  回复  引用  查看    
#2楼 2006-07-31 12:02 | Clingingboy      
楼主出的真快,是不是忘了加示例代码下载了?
  回复  引用  查看    
#3楼 2006-07-31 12:12 | 隨風.NET      
是的哦 发现无提供下载 呵呵
  回复  引用  查看    
#4楼 [楼主]2006-07-31 12:48 | TerryLee      
@aspnetx

Atlas中提供了一个AtlasWebParts.js,关于WebPart还没有研究-_-
  回复  引用  查看    
#5楼 [楼主]2006-07-31 12:49 | TerryLee      
@隨風.NET
@Clingingboy

谢谢提醒,我忘记了,呵呵

已经加上了
  回复  引用    
#6楼 2006-07-31 13:27 | dsa [未注册用户]
恩,果然,atlas比magicajax功能强多了,简单用的话,magicajax可以用,复杂了,就看来的用atlas,唯一不足的是不支持.net 1。1
  回复  引用  查看    
#7楼 [楼主]2006-07-31 13:35 | TerryLee      
@dsa
magicajax轻巧、Atlas庞大

尽快转向2.0吧,呵呵:-)
  回复  引用  查看    
#8楼 2006-07-31 13:44 | aspnetx      
magicajax还不晓得能否继续开发下去
因为作为小型开发来说,其提供的功能确实能满足大部分的需求
只是,好长时间不见其网站有更新了
难道是被atlas给压下去了?
不过我已经确定转向atlas的目标了
  回复  引用  查看    
#9楼 [楼主]2006-07-31 14:21 | TerryLee      
@aspnetx
从现在势头来看Atlas确实发展的比较好:-)
  回复  引用    
#10楼 2006-07-31 15:01 | 立特拉萨 [未注册用户]
不是比较好。。。而是一定会好的。。。我们手头上的项目就是用atlas(虽然还不是很熟悉)但他的靠山是微软。。。。。。。。。
没有做不到,只有想不到。最好是用在微软身上。。。。
呵呵。。。有点太那个拉。。。。。
  回复  引用  查看    
#11楼 [楼主]2006-07-31 15:16 | TerryLee      
@立特拉萨
是有点那个拉。。。
不过看看这个
http://blogs.msdn.com/alainler/archive/2006/07/26/678730.aspx
对Atlas还是比较有信心的
  回复  引用  查看    
#12楼 2006-07-31 15:29 | 木独朱      
看到你的手记前面几篇的时候,我就想问这篇文章讨论的问题,不想这里已经回答了我的疑问了。。。

多谢啊,从你这里,我也开始走进Atlas了。。。。
  回复  引用  查看    
#13楼 [楼主]2006-07-31 15:39 | TerryLee      
@木独朱

呵呵,不用客气,以后多交流:-)
  回复  引用    
#14楼 2006-08-01 09:58 | shenrui [未注册用户]
不知道你们有没有碰到过 当我使用Atlas 后整个也面回用UTF-8来传输导该页内输出的内容(读取数据库)变成乱码,虽然可以再转换回来但是信息内容较多的时候 转换效率不能让我满意。
  回复  引用  查看    
#15楼 [楼主]2006-08-01 12:43 | TerryLee      
@shenrui

我还没有遇到过这个问题:-)
  回复  引用    
#16楼 2006-08-15 17:54 | figo [未注册用户]
用了atlas后怎样弹出个提示框
  回复  引用  查看    
#17楼 [楼主]2006-08-16 08:18 | TerryLee      
@figo
在AtlasControlToolkit中有相关的Extender.
  回复  引用    
#18楼 2006-08-17 01:08 | NetFans [未注册用户]
有一个这样的问题,一个GridView控件怎么样分页和排序正确的得到数据。不知道老大能搞定不。谢谢!我的QQ:254524007
  回复  引用  查看    
#19楼 2006-09-06 16:40 | <>neilzhang      
我想问一下:
Atlas获取服务器端数据都是通过WebService Method或者Page Method 吗?
  回复  引用  查看    
#20楼 2006-09-06 16:42 | <>neilzhang      
看了大部分例子,都是新建在同一个工程的WebService,Atlas如何调用异地发布的WebService,像普通的WebService调用一样添加WebService引用吗?
  回复  引用  查看    
#21楼 [楼主]2006-09-06 17:00 | TerryLee      
@&lt;&gt;neilzhang
过段时间我会写Atlas中关于数据访问方面的文章。

调用远程WebService有一定的复杂度!
  回复  引用  查看    
#22楼 2006-09-17 13:40 | frack[匿名]      
您好!请教一个问题,我在后台写了
[System.Web.Services.WebMethod]
public string EchoString(string s)
{
return "Hello:" + s;
}

[System.Web.Services.WebMethod]
public string EchoString()
{
return "Hello:" + this.inputName1.Value;
}
分别放了2个按钮客户端事件去调用。结果第一个调不到会出错。是否不支持重载?
  回复  引用    
#23楼 2007-01-17 00:37 | snyod [未注册用户]
代表党(.NET平台)感谢您.
全部收藏...................
  回复  引用    
#24楼 2007-03-22 10:02 | lfcb [未注册用户]
请问版主,Page Method方法放在用户控件里怎么不行.有解决方法吗??
  回复  引用    
#25楼 2007-04-10 16:37 | w [未注册用户]
调不到一个void方法的吗?我试了几次都不成功!
  回复  引用    
#26楼 2007-10-03 23:09 | hhhh [未注册用户]
PageMethods没有定义

  回复  引用    
#27楼 2007-10-03 23:38 | hhhh [未注册用户]
PageMethods未定义我解决啦跟大家分享一下
<altas:ScriptManager ID="sc" runat="server" EnablePageMethods="true">
<altas:ScriptManager> // EnablePageMethods="true" 上面代码没有写啊

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod] //这个上面的代码少啦
public string EchoString()

{
return "Hello : " + this.inputName.Value;
}

  回复  引用    
#28楼 2007-10-04 00:13 | hhhh [未注册用户]
--引用--------------------------------------------------
hhhh: PageMethods未定义我解决啦跟大家分享一下
&lt;altas:ScriptManager ID=&quot;sc&quot; runat=&quot;server&quot; EnablePageMethods=&quot;true&quot;&gt;
&lt;altas:ScriptManager&gt; // EnablePageMethods=&quot;true&quot; 上面代码没有写啊

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod] //这个上面的代码少啦
public static string EchoString() //static
{
return &quot;Hello : &quot; + this.inputName.Value;
}

--------------------------------------------------------

  回复  引用    
#29楼 2007-10-04 00:14 | hhhh [未注册用户]
--引用--------------------------------------------------
hhhh: --引用--------------------------------------------------
hhhh: PageMethods未定义我解决啦跟大家分享一下
&amp;lt;altas:ScriptManager ID=&amp;quot;sc&amp;quot; runat=&amp;quot;server&amp;quot; EnablePageMethods=&amp;quot;true&amp;quot;&amp;gt;
&amp;lt;altas:ScriptManager&amp;gt; // EnablePageMethods=&amp;quot;true&amp;quot; 上面代码没有写啊

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod] //这个上面的代码少啦
public static string EchoString(string str) //static
{
return &amp;quot;Hello : &amp;quot; + str;
}

--------------------------------------------------------

--------------------------------------------------------


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-08-15 08:05 编辑过


相关链接: