为了账号安全,请及时绑定邮箱和手机立即绑定

我的Ajax服务端框架 - (1) JS直接调用C#方法

标签:
架构

注意:本文所介绍的框架已有新版本,点击后面链接即可阅读。【写自己的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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消