注意:本文所介紹的架構已有新版本,點擊後面連結即可閱讀。
【寫自己的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服務端架構
點擊此處進入樣本展示及下載頁面