閱讀862 返回首頁    go 技術社區[雲棲]


ajaxpro安裝和使用

1、 Ajax.net 做為Ajax技術在dotNet 框架下的實現,作者Michael Schwarz采取了一種封裝效果相當棒的技術:將客戶端處理XML、事件調用方式都封裝在2個Javascript文件中(AjaxPro.prototype.js 和AjaxPro.core.js),同時將這2個重要文件以資源的形式編譯於dll中,在處理客戶端請求其自定義的.ashx文件時,返回這兩個文件。所以我們在使用Ajax.net時需要在Web.config中添加如下httpHandlers以 AjaxPro.AjaxHandlerFactory來處理.ashx文件:

<system.web></system.web>之間插入以下代碼
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
</httpHandlers>
 
2、在此基礎上,Ajax.net開始對要求其處理的方法進行封裝,以便在客戶端通過Javascript來調用。首先在用戶必須調用的另一個ashx文件即 converter.ashx中做了方法的封裝,當然要支持任意多數量的參數及返回值的處理,然後就是對於服務端的邏輯處理方法所在類的封裝處理。
如何開始使用Ajax.net
A:獲取Ajax.net 可以到 https://www.schwarz-interactive.de/ 下載(目前最新版6.4.15.1.)。
B:解壓zip並在需要使用的項目中添加對dll的引用(其中AjaxPro.dll為dotnet1.1版,AjaxPro.2.dll 為2.0版)
C:如同上麵所說,在web.config中添加對ashx的處理
D:在服務端添加Ajax.net要處理的方法,假如我們要提供的服務是返回用戶輸入的字符的MD5校驗碼,那麼我們首先要做的是給這個方法加入需要Ajax.net處理使客戶端可以直接調用的屬性[AjaxPro.AjaxMethod]如下:
 
[AjaxPro.AjaxMethod]
public string Md5Hash(string sSou)
{
string sResult  ="";
 
byte[] byBuffer =  System.Text.Encoding.UTF8 .GetBytes(sSou);
System.Security.Cryptography.MD5CryptoServiceProvider  md = new System.Security.Cryptography.MD5CryptoServiceProvider();
 
byte[] result = md.ComputeHash(byBuffer);
 
for(int i=0; i
< result.GetLength(0); i++)
{
  sResult +
= result.ToString("X2");
}
 
return sResult;
 
}

然後在Page_Load中注冊此類
private void Page_Load(object sender, System.EventArgs e)
{
       AjaxPro.Utility.RegisterTypeForAjax
       (typeof(WebForm1));
    }
E:在客戶端調用方法:
<script type
="text/javascript">
function getMd5()
{
  var a = document.getElementById("source").value;
    var c = TAjax.WebForm1.Md5Hash(a);
    alert(c.value);
}
</script>
<input type="text" id="source" name="source" >
<input type="button" name="sub" onclick="getMd5()" value="提交">
當然這裏Tajax.WebForm1就是實現類的全名了(包括namespace).
這樣一個簡單應用就算完成了,怎麼樣,是不是簡單的很?在這麼簡單的使用了Ajax.net後你是不是和我一樣覺得不滿足,好像還有一些工作可以做?對了,接下來我們將繼續深度使用並實現無aspx文件的邏輯層和表現層的徹底分離。
應用Ajax.net在Asp.net中實現無aspx文件應用,徹底分離邏輯層和表現層
Asp.net 中居然沒有aspx文件,要如何實現呢?我不知道你想過沒有,我反正覺得這是個艱巨的任務;因為aspx文件做為一個橋梁連接了前台和後台,一個 runat=server為我們做了太多的事情,我們自己實現也不是完全不可以,不過費盡周折的意義可能並不大;說到意義——這樣做的意義我想不用我說,大家自己想想吧,嗬嗬。閑話少絮。我們接著進入正題。
通過前麵的描述,我想大家一定可以猜到關鍵點。對了,就是那幾個js,我們啟動程序,查看源文件,奧妙就在這裏:
<script type="text/javascript" src="/TAjax/ajaxpro/prototype.ashx"></script>
<script type="text/javascript" src="/TAjax/ajaxpro/core.ashx"></script>
<script type="text/javascript" src="/TAjax/ajaxpro/converter.ashx"></script>
<script type="text/javascript" src="/TAjax/ajaxpro/TAjax.WebForm1,TAjax.ashx"></script>
注:TAjax在VB中稱為項目名稱.在C#上則為名稱空間名.WebForm1為類名
前麵3個文件我就不在多說,前麵已經說過,我們隻看最後一個,那不正是Ajax.net對我們服務端類的封裝嗎?
addNamespace("TAjax");
TAjax.WebForm1_class = Class.create();
Object.extend(TAjax.WebForm1_class.prototype, Object.extend(new AjaxPro.AjaxClass(), {
       Md5Hash: function(sSou) {
              return this.invoke("Md5Hash", {"sSou":sSou}, this.Md5Hash.getArguments().slice(1));
       },
       initialize: function() {
              this.url = ''/TAjax/ajaxpro/TAjax.WebForm1,TAjax.ashx'';
       }
}));
TAjax.WebForm1 = new TAjax.WebForm1_class();
 
既然原理明白了,分離就簡單了,參照上一部份,我們的步驟從D開始改變
D:新建一個類Admin,將WebForm1.aspx.cs中的代碼拿過來。
注:在VB.NET中拷過來時隻需拷貝Md5Hash那段函數即可.不必再構造函數中注冊此類.C#中我沒試過
    
<AjaxPro.AjaxMethod()> _
    Public Function Md5Hash(ByVal sSou As String) As String
        Dim sResult As String = ""
        Dim byBuffer As Byte() = System.Text.Encoding.UTF8.GetBytes(sSou)
        Dim md As System.Security.Cryptography.MD5CryptoServiceProvider = New System.Security.Cryptography.MD5CryptoServiceProvider
        Dim result As Byte() = md.ComputeHash(byBuffer)
        Dim i As Integer
        For i = 0 To result.GetLength(0) - 1
            sResult += result(i).ToString("X2")
        Next
        Return sResult
    End Function
E:在客戶端調用方法:
新建一個htm文件include.htm,將前述四行調用放在這裏
 
新建一個htm文件test.htm,內容當然就是前麵的客戶端表示層。重要的一點就是要添加一個iframe如下:
<iframe name="include" marginwidth=0 marginheight=0  src="include.htm" frameborder=0></iframe>
同樣,修改調用為
<script type="text/javascript">...
function getMd5()
...{
    
var a  = document.getElementById("source").value;
    
var c = include.TAjax.Admin.Md5Hash(a);
    alert(c.value);
}

</script>
擴展:如果多處調用而且調用方法較長,你當然可以再對應每個業務類做個js文件,將其中的調用放在一起。
 

最後更新:2017-04-02 00:06:24

  上一篇:go 使用嵌套字用FTP協議進行文件上傳下載!
  下一篇:go 你還在用if else嗎?