关于asp.net中使用Ajax post方式调用asmx页面报错:未知Web方法的解决办法

关于asp.net中使用Ajax post方式调用asmx页面报错:未知Web方法的解决办法

  1. 当后台是aspx页面是时:

前端js代码:

function Check(id) {
                    $.ajax({
                        type: "post",
                        url: "WebForm1.aspx/GetPwd",
                        data: "{ 'userid':'"+a+"'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (data) {
                            pwdstr = data.d;
                            console.log(pwdstr);
                        },
                        error: function (err) {
                            alert(err)
                        }
                    })
                }

后端aspx.cs页面

 protected void Page_Load(object sender, EventArgs e)
        {

        }


        [WebMethod]
        public static string GetPwd(string userid)
        {
            string sqlstr = "select UserPwd from ChatUser where UserId='" + userid + "'";
            GDB gdb = new GDB();//这是我自定义的一个类用于连接数据库和并返回datatable
            DataTable dt = gdb.getDataTable(sqlstr);
            if (dt.Rows.Count == 0)
                return "0";
            else
                return dt.Rows[0][0].ToString();
        }

这样,前后端数据传输没有问题
在这里插入图片描述

  1. 当我的服务后台是asmx.cs页面时
    前端js代码如下(仅修改了url)
 function Check(id) {

                    $.ajax({
                        type: "post",
                        url: "webLogin.asmx/GetPwd",
                        data: "{ 'userid':'" + id + "'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (data) {
                            pwdstr = data.d;
                            console.log(pwdstr);
                        },
                        error: function (err) {
                            alert(err)
                        }
                    })
                }

后端asmx页面的代码:

 /// <summary>
    /// webLogin 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    [System.Web.Script.Services.ScriptService]
    public class webLogin : System.Web.Services.WebService
    {
        [WebMethod]
        public string GetPwd(string userid)
        {
            string sqlstr = "select UserPwd from ChatUser where UserId='" + userid + "'";
            GDB gdb = new GDB();
            DataTable dt = gdb.getDataTable(sqlstr);
            if (dt.Rows.Count == 0)
                return "0";
            else
                return dt.Rows[0][0].ToString();
        }
    }

取消注释:[System.Web.Script.Services.ScriptService]
方法内代码和aspx.cs一样,运行后报错:
在这里插入图片描述
在这里插入图片描述
解决办法:
经多次测试,后终于发现问题:
在使用post和后台交互时,如果后台是aspx页面,方法一定要写成静态的,如果后台是asmx页面,方法要写出非静态的(OMG!!!!!)

 [WebMethod]
        public **static** string GetPwd(string userid)

  [WebMethod]
        public string GetPwd(string userid)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ASP.NET Web项目,可以使用Ajax进行异步调用方法。下面是一个C#的代码示例: 1. 首先,在你的Web项目添加一个Web服务(.asmx文件)或者Web API控制器(.cs文件),定义一个需要被异步调用方法。 ```csharp // Web服务(.asmx文件)示例 [WebMethod] public string GetServerTime() { return DateTime.Now.ToString(); } // Web API控制器(.cs文件)示例 [HttpGet] public string GetServerTime() { return DateTime.Now.ToString(); } ``` 2. 在前端页面引入jQuery库和JavaScript代码,使用Ajax进行异步调用。 ```html <!-- 引入jQuery库 --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- JavaScript代码 --> <script> $(document).ready(function () { // 使用Ajax异步调用方法 $.ajax({ type: "GET", // 请求类型(GET、POST等) url: "YourWebService.asmx/GetServerTime", // Web服务的url或Web API控制器的路由 contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { // 异步调用成功后的处理 var serverTime = response.d; // 获取返回的数据 console.log(serverTime); }, error: function (xhr, status, error) { // 异步调用失败后的处理 console.log(error); } }); }); </script> ``` 请注意,上述示例的"YourWebService.asmx/GetServerTime"或者"YourApiController/GetServerTime"需要根据你的实际情况进行替换。另外,如果你的Ajax调用返回的是JSON格式的数据,可以在success回调函数进行进一步的处理,并根据需要更新页面内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值