0

我有一个 .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; }
        }
    }

}

4

5 回答 5

0

我怀疑你的ajax调用没有发生。

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

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

最后,您可以尝试在错误回调中设置断点以查找是否有任何序列化错误。如果是这样,您可以尝试使用 JavaScriptSerializer 将 LIST 序列化为 JSON 并将结果作为字符串返回

于 2013-10-30T15:54:02.657 回答
0

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

于 2013-10-30T15:27:33.670 回答
0

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

像这样

JavaScriptSerializer js = new JavaScriptSerializer();
string strJSON = js.Serialize(staff);
return strJSON;
于 2013-10-30T15:21:01.217 回答
0

几件事情要检查。

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

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

  3. 如果您从其他地方(例如 code behind )调用 web 方法,它会给您正确的结果吗?

于 2013-10-30T15:37:12.750 回答
0

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

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

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

于 2013-10-30T15:43:15.813 回答