注意:本文所介绍的框架已有新版本,点击后面链接即可阅读。【写自己的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服务端框架
点击此处进入示例展示及下载页面
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦