0

WebMethod がリストを返すようにしたい .aspx ページがあるので、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

このタスクには 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 に答える
0

戻り値の型を文字列に変更し、オブジェクトの json シリアル化された文字列を返してみます。

このような

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

ページの代わりに WCF サービスを作成してください。ジェネリックリスト Staff[] の代わりに配列を返すことを検討してください

于 2013-10-30T15:27:33.670 に答える
0

確認することはほとんどありません。

  1. セッションを有効にする必要がありますか: Services.WebMethod(EnableSession:=True)

  2. 正しいメソッド名を使用していますか (スペルをチェックしてください)。いいですね、ajax 呼び出しのコードを投稿していただけませんか?

  3. コード ビハインドなどの別の場所から Web メソッドを呼び出した場合、正しい結果が得られますか?

于 2013-10-30T15:37:12.750 に答える
0

あなたの ajax 呼び出しが行われていないと思われます。

リストが空でないことが確実であれば、ajax リクエストの dataType と contentType をそれぞれ json と "application/json" に設定していることを確認してください。

スクリプト マネージャー コントロールを使用している場合は、Enablepagemethods が true に設定されていることを確認してください。

最後に、エラー コールバックにブレーク ポイントを設定して、シリアル化エラーがあるかどうかを確認できます。エラーがある場合は、JavaScriptSerializer を使用して LIST を JSON にシリアル化し、結果を String として返すことができます。

于 2013-10-30T15:54:02.657 に答える