Ideamarket

DotNetNuke 4.x 使用jQuery, Webservices 實踐ClientAPI.Part.2 使用WebServices實踐ClientAPI

Posted by: Crab Lin on: 2009/02/09

在Part1文章已成功的在DNN4.x使用jQuery,已可以使用jQuery的語法,再來我們要用WebServices的方式實踐ClientAPI。

首先我們得先確認web.config內是否設定下列項目(DNN4.x因為有使用MS的ClientAPI,皆已設定下列數值)

<httpHandlers>
   <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=********************" />
   <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=********************"  />
   <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=********************"  validate="false" />
</httpHandlers>

以上確認完畢後,撰寫WebServices部分,需使用 System.Web.Script.Services,並宣告class為ScriptService(可讓javascript呼叫此函式),webservice程式碼如下:
// WebServices/CrabWS.asmx
...
using System.Web.Script.Services;
...
namespace Crab.WS
{
   [WebService(Namespace = "Crab.WS")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [ScriptService]
   public class UserService
   {
      [WebMethod]
      public string getName()
      {
         return "Crab Lin";
      }
      [WebMethod]
      public bool NameEquals(string nameA, string nameB)
      {
          return nameA.Equals(nameB);
      }
   }
}

在PageLoad的部分透過DotNetNuke.Framework.AJAX的函式,新增Webservices ClientAPI(也可在Part1時已建立的 SiteModuleBase.cs裡新增AjaxRegisterServices的函式,方便其他模組使用時重覆宣告)

//OnPageLoad
protected void Page_Load(System.Object sender, System.EventArgs e)
{
   ...
   if (DotNetNuke.Framework.AJAX.IsInstalled())
   {
      DotNetNuke.Framework.AJAX.RegisterScriptManager();
   }
   // Create a reference to the Script Manager
   ScriptManager objScriptManager = ScriptManager.GetCurrent(this.Page);
   objScriptManager.EnablePageMethods = true;
   ServiceReference objServiceReference = new ServiceReference();
   objServiceReference.Path = @"WebService/CrabWS.asmx";
   objServiceReference.InlineScript = true;
   objScriptManager.Services.Add(objServiceReference);
}

在模組載入時,會同時register webservices funcation,即可在javascript用namespace的方式取用webservices function,如下列方式使用:

<script language="javascript">
   jQuery(document).ready(function(){
      //無參數
      Crab.WS.UserService.getName(function(userName){
         alert(userName);
      });
      //兩個參數
      Crab.WS.UserService.NameEquals("Crab", "Max", funcation(IsEqual){
         alert(IsEqual);
      });
   });
});
</script>

重點: 呼叫WS function最後一個參數值為AjaxSuccessFunction,將回傳結果交給一個javascript function接值處理。

同系列文章:
Part.1 成功使用jQuery
Part.3 完成AJAX功能

一則回應 至 "DotNetNuke 4.x 使用jQuery, Webservices 實踐ClientAPI.Part.2 使用WebServices實踐ClientAPI"

[...] DotNetNuke 4.x 使用jQuery, Webservices 實踐ClientAPI.Part.2 使用WebServices實踐Client… [...]

發表迴響

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

連結到 %s

Follow

Get every new post delivered to your Inbox.