在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 }, // ...... });
好了,这个演示就写到这里,更多细节请查看用户手册。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?