[翻译]asp.net ajax xml-script教程(三)

初稿地址:http://dotnetslackers.com/articles/atlas/xml_script_tutorial_part3.aspx

asp.net ajax xml-script教程(三)

原稿发布日期:2007.01.01
作者:Alessandro
Gallo
翻译:webabcd

介绍
在xml-script教程的首先部分(译者注:汉语在此间)和其次有的(译者注:华语在此)中我们介绍了声明程序模型与如何通过客户端的Microsoft
Ajax对象处理事件。处理事件可以调用一段落javascript函数,也可以动用action。在本文(第三局部)中我们以谈谈InvokeMethod
action,它同意我们盖宣称的计调用一个方式。

InvokeMethod Action
InvokeMethod
action可以调用一个法,该办法必须是客户端对象都有的一个类型描述吻合。在连下的示范中,我们以介绍一个action,它就是是Futures
CTP下的Sys.Preview.Net.ServiceMethodRequest。这个看似华而不实出了一个异步调用web
service的计,并且产生一个同意在xml-script中动用的类别描述称。也就是说我们好无用写一行javascript就能调用一个web
service上的方法以赢得返回结果。

示例
俺们用调用web
service上的一个赶回时时光之法门,然后拿这个时刻显示到一个Label上。

先是我们设优先创造一个web
service。在您的装置了Ajax-CTP的站点中新盘一个叫也DateTimeService.asmx的web
service,其代码如下:

<%@ WebService Language=”C#” Class=”DateTimeService” %>  
using System; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 
using System.Web.Script.Services;  

[WebService(Namespace = “http://tempuri.org/")\] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class DateTimeService : System.Web.Services.WebService 
{      
  [WebMethod]     
  [ScriptMethod]     
  public string GetTimeAsString() 
  {         
    return DateTime.Now.ToShortTimeString();     
  } 

瞩目:DateTimeService类被ScriptService属性所描述,它打招呼asp.net
ajax去死成一个web
service的客户端代理类。这个代理类允许我们使用客户端的javascript来调用以ScriptMethod描述的方(就是比如说GetTimeAsString的这种艺术)

如今于咱们来探视xml-script中之代码,为了以xml-script这个特点,你得以公的web站点中引用Microsoft.Web.Preview.dll,然后在ScriptManager内加载PreviewScript.js文件

<%@ Page Language=”C#” %>

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

<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
    <title>Declarative WebService Call</title>
</head>
<body>
    <form id=”form1″ runat=”server”>
    <asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
     <Services>
        <asp:ServiceReference Path=”DateTimeService.asmx” />
     </Services>
     <scripts>
            <asp:ScriptReference Assembly=”Microsoft.Web.Preview” Name=”PreviewScript.js” />
     </scripts>
    </asp:ScriptManager>
    
    <h2>
        <span>Time on Web Server: </span>
        <asp:Label ID=”lblTime” runat=”server”></asp:Label>
    </h2>

    <script type=”text/xml-script”>
     <page xmlns=”http://schemas.microsoft.com/xml-script/2005"&gt;
        <components>
         <label id=”lblTime” />
         
         <timer id=”theTimer” interval=”2000″ enabled=”true”>
             <tick>
                 <invokeMethodAction target=”timeServiceMethod” method=”invoke”>
                     <parameters userContext=”” />
                 </invokeMethodAction>
             </tick>
         </timer>
         
         <serviceMethodRequest id=”timeServiceMethod” 
                                 url=”DateTimeService.asmx” 
                                 methodName=”GetTimeAsString”>
            <completed>
                <setPropertyAction target=”lblTime”
                                 property=”text”
                                 >
                    <bindings>
                        <binding dataContext=”timeServiceMethod”
                                 dataPath=”result”
                                 property=”value”
                                 />        
                    </bindings>
                </setPropertyAction>
            </completed>
         </serviceMethodRequest>
        </components>
     </page>
    </script>
    </form>
</body>
</html>

吃咱来拘禁无异扣押里面的xml-script代码块。label元素关联到span标签,Sys.Preview.UI.Label控件的实例在runtime的下让创造。后面是一个timer元素,使用其的时节会创一个Sys.Preview.Timer类的实例,timer暴露了一个interval属性用来设置时间的间距,每过一个间隔时间Timer对象的tick事件将让硌。

至于InvokeMethod Action的还多内容
tick事件可以就此来处理一个InvokeMethod
action,调用它的道是invoke(在method属性中指定),调用对象的id是timeServiceMethod,用target属性指出。在invokeMethodAction元素内出一个parameters元素,该因素用于指定传递让方的参数。如果要是指定一个参数,我们要在parameters元素中益参数名称与参数值。在面的例证中,我们指定了一个被称作userContext的参数并设置其值为空。

id为timeServiceMethod的serviceMethodRequest元素被分析成一个Sys.Preview.Net.ServiceMethodRequest类的实例。url和methodName属性分别指定web
service的路线和调用方法的号。

当serviceMethodRequest元素内我们见面发觉一个completed节点。当ServiceMethodRequest类成功的异步调用了web方法后将触发completed事件,我们下SetProperty
action来处理是波,以安label的text为web方法返回的格式化了当前日期的字符串。ServiceMethodRequest类还暴露了别一些波,如timeout和error,当异步请求的拍卖期间发生了过或错的时刻将会接触它们。

绑定
于setPropertyAction元素内声明一个绑定元素是同一码为丁谢兴趣的行。因为通过web方法返回的字符串是储存于ServiceMethodRequest类的result属性里的,所以我们不克于setPropertyAction的value属性中指定它,而是欲声明式的造访result属性。

假使如此做,就需利用绑定,建立平等对象或不同目标的星星点点单特性之间的涉及,可以使当一个特性发生变更的时,另一个属性也自动的改观。如果您放在心上看了示范中的绑定声明,你晤面看到dataContext属性指向timeServiceMethod,dataPath属性指向result。最后property属性设置成value。setPropertyAction元素的value属性(或者说是SetPropertyAction类的value属性)将连跟ServiceMethodRequest类的result属性有一致的价值。作为结果,label的text将经result属性被设置成归来的字符串。

设若您还非亮堂绑定是什么工作之,不要急,因为我们以在是系列教程的下一部分中说明其。

总结
每当本文(教程的老三片段)中我们介绍了InvokeMethod
action,这个action可以调用一个以客户端对象中之色描述符中暴露的计。在这个例子中,我们采取了InvokeMethod
action和SetProperty
action去各隔一段时间调用一糟web方法,并以label中显示返回的字符串,所有这些都无须写一行javascript。

以本教程的下一部分中,我们以掌握怎样创造于定义之action。

相关文章