Ajax.dll文件的應用

小研究了一下如何用Ajax.dll實現上一個例子,很沮喪,因爲使用人家的方法,更簡單,代碼更少,而且僅僅是它的皮毛而已。所以,如果做項目要用到Ajax,建議研究一下框架,比如說Ext。它的類庫和文檔相當豐富,簡單易上手。

    好吧,我把實現過程列出來。首先我們需要一個Ajax.dll文件,這個自己去找吧!放到項目中,並添加好引用。首先,你需要一個類,隨意命名爲“AjaxMethod.cs”代碼如下:

    namespace Test.AjaxTest

    {

    /// <summary>

    /// AjaxMethod 的摘要說明。

    /// </summary>

    public class AjaxMethod

    {

    public AjaxMethod() {}

    //數據庫查詢操作

    [Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]

    public DataSet GetList(string id)

    {

    string sql = "select CityName,CityCode from City where [ID]=" + id;

    return SelectData(sql); //調用下面的方法

    }

    //

    private DataSet SelectData(string sql)

    {

    //數據庫鏈接定義:

    //Web.config中<configuration><appSettings></appSettings></configuration>

    //中添加定義:<add key="ConnectionString" value="data source=localhost;

    // initial catalog=helpdesk1; user id=sa; password=sa; "></add>

    string cs = System.Configuration.ConfigurationSettings .AppSettings["ConnectionString"];

    //或者直接這樣定義

    //string cs = "Server=(local);UID=sa;PWD=sa;Database=HelpDesk1";

    SqlDataAdapter sda = new SqlDataAdapter(sql,cs);

    DataSet ds = new DataSet();

    sda.Fill(ds);

    return ds;

    }

    }

    }

    接下來是你要實現效果的頁面a.aspx,<body>部分很簡單:

    <body>

    <form id="Form1" method="post" runat="server">

    <select id="AList" οnchange="GetBList()">

    <option value="0">A</option>

    <option value="1">B</option>

    <option value="2">C</option>

    </select>

    <select id="BList"></select>

    </form>

    </body>    當頁面觸發onchange事件,便進入了GetBList()方法,下面是該頁面完整的js: <script language="javascript">

    function GetBList() {

    //調用數據庫操作方法

    var av = document.getElementById("AList").value;

    // 調用AjaxMethod類的方法,至於這裏有兩個參數,猜想是一個委託,// 將GetList執行結果DataSet傳遞給SetBList方法,隱藏了AjaxMethod.GetList(av, SetBList);

    }

    function SetBList(response) {

    if(response != null) { var ds = response.value;  // 返回集

    // 這裏很有特色,開始我感覺出錯了,怎麼js的語法規則跟c#一樣啊// 可見Ajax.dll裏面的正則應該寫的暴強!不過有一點讓人感覺不爽// 我在測試時,將ds.Tables[0].Rows.lenght寫成了ds.Tables[0].Rows.Count // js會找不到對象的錯誤。

    // 如此等於,我們還是要習慣它的規則,畢竟不完全是c#,它只是定義了一種跟c#

    //非常接近的語法規則而已

    if(ds != null && typeof(ds) == "object" && ds.Tables != null) { alert(ds.Tables[0].Rows.length);

    for(var i=0;i<ds.Tables[0].Rows.length;i++) { var option = document.createElement("OPTION");

    option.value = ds.Tables[0].Rows[i].CityCode;

    option.text = ds.Tables[0].Rows[i].CityName;

    document.Form1.BList.options.add(option);

    }

    }

    }

    }

    </script>

    如此例子便結束了,很多繁複的操作都封裝了。我們學到的只是如何用,僅此而已,不過在我們趕項目的時候,確實能帶來很多的方便。

    補充:按照上面的方式配置,會得到一個異常,就是無法識別AjaxMethod類的異常,我們需要在頁面的後臺cs文件中,添加定義:Ajax.Utility.RegisterTypeForAjax(typeof(完整命名空間.AjaxMethod));

    除了這裏要添加註冊定義之外,我們還需要在web.config中添加:

    <httpHandlers>

    <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />

    </httpHandlers>

    延伸:我們完全可以將AjaxMethod寫成一個公共Page,將調用業務層代碼的方法添加進來。如此,便可以不用在那裏面定義數據庫鏈接了——我們要得到的僅僅是一個DataTable,而不必關心用什麼樣的方式得到它。這樣的設計與項目框架的結合將更緊密。

發佈了46 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章