我的Ajax服務端架構 – (1) JS直接調用C#方法

來源:互聯網
上載者:User

注意:本文所介紹的架構已有新版本,點擊後面連結即可閱讀。
【寫自己的ASP.NET MVC架構】

返回到目錄:晒晒我的Ajax服務端架構

在Ajax網站中,Javascript經常需要請求伺服器,比如:提交一個小的狀態修改請求,擷取某個對象的JOSN字串,擷取一小段HTML,等等。

FishWebLib的Ajax服務端架構提供的這個功能將讓您可以在Javascript直接調用一個C#方法,用來完成上述需求。範例程式碼如下:

C#方法

namespace MyLab.AjaxService{    /// <summary>    /// Ajax服務類,提供“商品記錄”相關操作    /// </summary>    public class AjaxProduct    {        public int ChangeProductQuantity(int productId, int quantity)        {            if( productId < 0 )                throw new MyMessageException("沒有指定ProductID");            return BllFactory.GetProductBLL().ChangeProductQuantity(productId, quantity);        }    }}

說明:對於方法的參數個數,以及傳回值的類型,本架構並沒有特別的限制,可以根據您的要求隨意指定。
範例程式碼中雖然將傳回值定義為int類型,你完全可以使用其它的類型,甚至沒有傳回值。

Javascript調用代碼

function SetQuantityTextboxEvent(){    $("input.quantityTextbox").change(function(){        var j_textbox = $(this);        var recId = j_textbox.attr("pid");        var newValue = j_textbox.val();        $.ajax({            dataType: "text", type: "POST",            url: "/AjaxProduct.ChangeProductQuantity.cs",            data: {productId: recId, quantity: newValue  },            success: function (responseText) {                // ............            }        });    });}

C#方法的參數形式

上面範例程式碼中包含二個參數:productId和quantity。
事實上,也可以是自訂的類型,但需要將productId和quantity定義成屬性或者欄位,訪問性請設定為public
此時完全不要修改JS代碼。

C#方法可以是執行個體方法,也可以是靜態方法。類可以是靜態,也可以是非靜態。

由於".cs" 檔案是不能直接存取的,所以還需要以下配置:

<httpHandlers>    <add verb="*" path="*.cs" validate="false" type="FishWebLib.Ajax.AjaxMethodV2Handler, FishWebLib, Version=3.0.0.0, Culture=neutral, PublicKeyToken=04db02423b9ebbb2"/></httpHandlers>

或者不使用以上配置,但需要一個 ashx 處理器

public class ajax : IHttpHandler{    // 說明:    // 在本網站的樣本中,有些JS調用的URL諸如:url: "/AjaxOrder.AddOrder.cs"    // 由於 ".cs"這種副檔名一般是被Asp.net禁止訪問的。    // 所以如果您沒有機會修改IIS層級的設定或者Web.config,則不能使用上面的格式,    //    // 而只能使用這種格式的URL了:url: "handler/ajax.ashx?class=AjaxOrder&method=AddOrder"    // URL參數中的 class 的含義是:指定要調用哪個Ajax服務類(包含命名空間), method 的含義是:指定要調用哪個方法。    //    // 這也是當前檔案"ajax.ashx"存在的意義了。    // 在這個檔案中,只需要簡單的“轉寄”一下調用就可以了。    //     // 如果你覺得 class, method 這二個參數的名稱不恰當,也可以用這種方法來“重定義”,    // 最後可以調用 FishWebLib.Ajax.MethodExecutor.ProcessRequest(HttpContext context, Type type, string method)    // 或者:ProcessRequest(HttpContext context, string AssemblyName, string className, string method)    // assemblyName 指定了所有供Ajax可以調用的類型的程式程式集。    private static readonly string assemblyName = typeof(MyLab.AjaxService.AjaxCustomer).Assembly.ToString();        public void ProcessRequest (HttpContext context) {        // 轉寄調用。第二個參數是說:要調用的類在哪個程式集中。        // 這個重載要求在URL參數中存在這二個參數項:class, method        FishWebLib.Ajax.MethodExecutor.ProcessRequest(context, assemblyName);    }}

Javascript調用代碼

$.ajax({    url: "ajax.ashx?class=AjaxProduct&method=ChangeProductQuantity",     data: {productId: recId, quantity: newValue  },    // ......});

好了,這個示範就寫到這裡,更多細節請查看使用者手冊。

返回到目錄:晒晒我的Ajax服務端架構

點擊此處進入樣本展示及下載頁面

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.