【问题标题】:Web Method in aspx page not getting executedaspx 页面中的 Web 方法未执行
【发布时间】:2015-12-17 10:33:26
【问题描述】:

我正在尝试在页面加载本身时发出 ajax 请求。我正在使用 angular js $http 服务从我的User.aspx.cs 页面中存在的 web 方法获取 Json 数据。

我的网络方法如下:

[WebMethod]
    [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
    public static List<Users> GetUsers()
    {
        DBUtil objUtils = new DBUtil(); //This is my class for db connection

        List<Users> list = new List<Users>();
        string strQuery = "select * from TM_Users";
        DataTable dt = objUtils.GetDataTable(strQuery);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            list.Add(new Users {FullName=dt.Rows[i]["FullName"].ToString(),
            UserName=dt.Rows[i]["UserName"].ToString(),
            Password=dt.Rows[i]["Password"].ToString(),
            phNum=dt.Rows[i]["MobileNo"].ToString(),
            EmailId=dt.Rows[i]["EmailAddress"].ToString(),
            Usertype=dt.Rows[i]["UserType"].ToString(),
            CenterId=dt.Rows[i]["HealthCenterID"].ToString()
            });
        }
            return list;
    }

web 方法没有问题。当我尝试在 $http 的帮助下调用 web 方法时,$http 写在一个单独的 js 文件中的控制器中,比如Control.js。我的功能是,我使用的是 ng网格,因此将该网格与数据库中的数据绑定。 代码如下:

var app = angular.module("myApp", ["ngGrid"]);

app.controller('myCtrl', function ($scope, $http, $location) {
    //var myData = $http.get("User.aspx/GetUsers");
    $scope.location = $location;
    var url1 = "User.aspx/GetUsers";
    var myData;
    $http.get(url1).success(function (data,status,headers) {
        myData = data;
    }).error(function (err) {
        console.log(err);
    })
    $scope.gridOptions = {
        data: 'myData'
    };

});

当我调试时,我注意到成功处理程序正在执行。但是 aspx.cs 页面上的 web 方法没有得到执行。我在成功处理程序数据中收到的响应是 .aspx 网页的整个 html

感谢您的帮助!!

【问题讨论】:

  • public static List&lt;Users&gt; GetUsers()等webmethod中添加静态
  • 如果收到请求添加[ScriptMethod(UseHttpGet =false)]
  • 很抱歉他们没有解决我的问题。我收到一条错误消息,指出对象不支持我的控制器中的属性或方法“配置”
  • 哦,好的,将 var myData; 更改为 $scope.myData=''
  • 我认为它与异常无关

标签: javascript angularjs angularjs-http


【解决方案1】:

像这样改变你的http get调用。我已经添加了内容类型,一个空的数据对象和响应类型为json。

var app = angular.module("myApp", ["ngGrid"]);

app.controller('myCtrl', function ($scope, $http, $location) {
    var request =
    {        
    method: "GET",
    url: "User.aspx/GetUsers",
    data: {},
    headers: { "Content-Type": "application/json" },
    responseType: 'json'
    }

    $http(request).then(function (data,status,headers) {
        myData = data;
    }).error(function (err) {
        console.log(err);
    })
    $scope.gridOptions = {
        data: 'myData'
    };

});

});

【讨论】:

  • 谢谢你的作品。我很高兴你能告诉我我做错了什么
  • 当我在 web 方法中使用 UseHttpGet =true 时它的工作方式
  • 您实际上需要明确告知请求您期望的数据内容类型和响应。
  • 我发现的另一件事是成功和错误处理程序已被弃用。所以如果我们使用它们会引发错误。我们只使用 then 方法。所以删除你的错误方法解决方案
【解决方案2】:

Webmethod 应该是 static 方法。

【讨论】:

  • 谢谢提醒..Edited with static..还是出现同样的错误
  • 成功处理程序中的数据具有aspx页面的html
  • 调试并检查是否调用了webmethod。
  • 没有不调用网络方法
  • 我认为您需要允许使用 GET 类型的请求调用 webmethod,如下所示:- [ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
相关资源
最近更新 更多