• C#中[WebMethod]的用法,aspx、ashx、asmx


    在.net 3.5的情况下

    前台JQuery做Ajax的时候,服务器端

    (1)可以调用aspx.cs 中声明带有[WebMehtod]的public static 的方法(不需要自己手动添加web.config的配置)

    (2)可以调用 *.asmx (web服务) 里面加了[webmethod]的方法(不能写静态,写静态就调用不到了)需要在asmx里面 去掉 [System.Web.Script.Services.ScriptService] 的注释 

    (3)可以调用 *.ashx (一般处理程序),它和aspx一样都实现了IHttpHandler接口。

    方法调用也分不同返回情况:

    • 无参数的方法调用    public static string SayHello(){}   
    • 带参数的方法调用     public static string GetStr(string str, string str2)
    • 返回数组方法的调用   public static List<string> GetArray()

    例如:

    (1)aspx.cs 静态方法[WebMethod]

    [WebMethod]   
    public static string SayHello()   
    {   
         return "Hello Ajax!";   
    }
    复制代码
    $(function() {   
        $("#btnOK").click(function() {   
            $.ajax({   
                //要用post方式   
                type: "Post",   
                //方法所在页面和方法名   
                url: "data.aspx/SayHello",   
                contentType: "application/json; charset=utf-8",   
                dataType: "json",   
                success: function(data) {   
                    //返回的数据用data.d获取内容   
                    alert(data.d);   
                },   
                error: function(err) {   
                    alert(err);   
                }   
            });   
     
            //禁用按钮的提交   
            return false;   
        });   
    });
    复制代码

    (2)WebService1.asmx

    复制代码
      /// 返回泛型列表 
        [WebMethod]
        public List<int> CreateArray(int i)
        {
           List<int> list = new List<int>(); 
           while (i >= 0)
           {
               list.Add(i--);
           } 
           return list;
        }
    复制代码
    复制代码
    //返回泛型列表
        $("#btnArray").click(function(){
           $.ajax({
             type: "POST",
             contentType:"application/json",
             url:"WebService1.asmx/CreateArray",
             data:"{i:10}",
             dataType:'json',
             success:function(result){                    
                 alert(result.d.join(" | "));
               }
            });
        });
    复制代码
    (3)handler处理程序
    复制代码
    $("#dbtn").click(function() {  
      $.ajax({ 
         type: "POST",  
         dataType:"Text", 
         url: "AjaxHandler.ashx", 
         data: { name: "admin", pass: "admin" },  
         beforeSend: function() { $("#ds").html("loading"); },  
         success: function(msg) { $("#ds").html("<p>" + msg + "</p>"); }  
        }); 
    });  
    复制代码

     参考:http://blog.csdn.net/lovegonghui/article/details/49072363

    WebMethod属性不难看出这实际上还是应用了webservice组件的方式来实现的。当然ajax实现异步请求的资源可以使aspx、ashx、webservice等

    复制代码
    //标准的写法:
    $.ajax({
         type: "post",
         dataType: "json",
         contentType: "application/json", //注意:WebMethod()必须加这项,否则客户端数据不会传到
    服务端
         data:{如上所述},//注意:data参数可以是string个int类型
         url: "List.aspx/DeleteNews",//模拟web服务,提交到方法
         // 可选的 async:false,阻塞的异步就是同步
         beforeSend:function(){
              // do something.
              // 一般是禁用按钮等防止用户重复提交
              $("#btnClick").attr({disabled:"disabled"});
              // 或者是显示loading图片
         },
         success: function (data) {
              alert("success: " + data.d);//注意这里:必须通过data.d才能获取到服务器返回的值
              // 服务端可以直接返回Model,也可以返回序列化之后的字符串,如果需要反序列化:string json = JSON.parse(data.d);
              // 有时候需要嵌套调用ajax请求,也是可以的
         },
         complete: function(){
              //do something.
              $("#btnClick").removeAttr("disabled");
              // 隐藏loading图片
         },
         error: function (data) {
              alert("error: " + data.d);
         }
    });
    复制代码

    而mvc中的ajax异步请求

    由于mvc采用基于路由映射,所以Controller中的Action可以直接通过url请求。

  • 相关阅读:
    无穷字符串问题--CSDN上的面试题(原创)
    c语言:将二进制数按位输出
    构造和为指定值的表达式:±1±2±3±4±5=3 确定符号
    c语言:最长对称子串(3种解决方案)
    最长公共子串
    ie7下 滚动条内容不动问题
    沙盒密探——可实现的js缓存攻击
    yii2归档安装
    php 安装composer
    [转]-Android Studio 快捷键整理分享-SadieYu
  • 原文地址:https://www.cnblogs.com/zhangwei99com/p/8984153.html
Copyright © 2020-2023  润新知