Web方法没有返回列表?

时间:2013-10-30 15:17:10

标签: c# asp.net webmethod

我有一个.aspx页面,我希望我的WebMethod返回一个List,这样我就可以从jQuery ajax调用中调用它并得到一个JSON类型的响应......这是我的代码,但它只返回一个空白页面?

任何帮助都会很棒

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Web.Services.Protocols;
using System.Web.Script.Services;

namespace Test.webservices.mainGrid
{
    public partial class staffTreeView : System.Web.UI.Page
    {

        [WebMethod()]
        public static List<Staff> GetStaff()
        {
            try
            {
                List<Staff> staff = new List<Staff>();
                //  HttpCookie _userinfo = HttpContext.Current.Request.Cookies["userinfo"];
                string connectionstring = ConfigurationManager.ConnectionStrings["TestProduction"].ConnectionString;
                SqlConnection connection = new SqlConnection(connectionstring);

                string sql = "sd_STAFFTREEVIEW";
                SqlCommand command = new SqlCommand(sql, connection);

                command.CommandType = CommandType.StoredProcedure;

                SqlDataReader dr = command.ExecuteReader();

                while (dr.Read())
                {
                    staff.Add(new Staff()
                    {
                        id = dr.GetString(dr.GetOrdinal("id")),
                        NAME = dr.GetString(dr.GetOrdinal("NAME")),
                        PARENT = dr.GetString(dr.GetOrdinal("PARENT")),
                        VALUE = dr.GetString(dr.GetOrdinal("VALUE")),
                        VALUETYPE = dr.GetString(dr.GetOrdinal("VALUETYPE"))
                    });
                }
                dr.Close();
                return staff;
            }
            catch (Exception ex)
            {
                throw new System.Exception("No Data Returned:" + ex.Message);
            }

        }

        public class Staff
        {
            public string id { get; set; }
            public string NAME { get; set; }
            public string PARENT { get; set; }
            public string VALUE { get; set; }
            public string VALUETYPE { get; set; }
        }
    }

}

5 个答案:

答案 0 :(得分:0)

我会尝试将返回类型更改为字符串并返回该对象的json序列化字符串。

喜欢这个

JavaScriptSerializer js = new JavaScriptSerializer();
string strJSON = js.Serialize(staff);
return strJSON;

答案 1 :(得分:0)

创建WCF服务而不是页面! 并考虑返回一个数组而不是通用列表Staff []

答案 2 :(得分:0)

很少要检查。

  1. 您是否需要启用会话:Services.WebMethod(EnableSession:= True)

  2. 您使用的是正确的方法名称(检查拼写)。更好的是,你可以发布ajax调用的代码吗?

  3. 如果你从其他地方调用网络方法,比如代码,那么它能给你正确的结果吗?

答案 3 :(得分:0)

我建议您使用WebAPI控制器执行此任务,可以在Web表单应用程序中使用,只需在application_start中连接路由

它将为您节省一些痛苦并让您的生活更轻松

http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-aspnet-web-forms

答案 4 :(得分:0)

我怀疑你的ajax电话没有发生。

如果您确定列表不为空,请确保已将ajax请求的dataType和contentType分别设置为json和“application / json”。

如果您使用的是脚本管理器控件,请确保将Enablepagemethods设置为true。

最后你可以尝试在错误回调中设置一个断点来查找是否存在任何序列化错误。如果是这样,你可以尝试使用JavaScriptSerializer将LIST序列化为JSON并将结果返回为String