2

グラフをプロットするために C# から入力を取得するチャートを使用しています。C# から jQuery に値を返すために JSON を使用しています。とにかくそれは私を助けません、私は何を間違えましたか?

これは私のaspxコードです:

<script type="text/javascript">
    $(document).ready(function () {
        var source = {};

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: "Default.aspx/getall",
            contentType: 'application/json; charset=utf-8',
            cache: false,
            success: function (response) {

                source = $.parseJSON(response.d);

            },
            error: function (err) {
                alert('Error');
            }
        });
</script>

そして、これは私のC#コードです:

public class sampledata
{
    public string Day { get; set; }
    public int Keith { get; set; }
    public int Erica { get; set; }
    public int George { get; set; }
}

public partial class _Default : System.Web.UI.Page 
{
    List<sampledata> s = new List<sampledata>();

    protected void Page_Load(object sender, EventArgs e)
    {
        s.Add(new sampledata { Day = "monday", Keith = 20, Erica = 15, George = 25 });
        s.Add(new sampledata { Day = "tuesday", Keith = 25, Erica = 20, George = 35 });

        Session["data"] = s;                  
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static List<sampledata> getall()
    {
        List<sampledata> data = (List<sampledata>)HttpContext.Current.Session["data"];
        return data;
    }
}
4

3 に答える 3

2

ajax ポストバックの代わりに、PageMethods を使用できます。

C# ページ:

[WebMethod]
public static List<sampledata> getall()
{
    List<sampledata> data = (List<sampledata>)HttpContext.Current.Session["data"];
    return data;
}

aspx ページで:

$(document).ready(function () {
    var data=PageMethods.getall(OnSuccess);

    function OnSuccess() {
        alert("Success");
    }
});

また、PageMethods を使用するには、これをフォーム タグに追加する必要もあります。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
于 2013-10-31T08:46:20.097 に答える
1

WebMethodAttributeMicrosoft の AJAX 実装 ( 、 、応答のScriptManagerそのプロパティについて心配する必要があるなど)に依存したくない場合は.d、ASHX ハンドラーを使用してきれいな JSON 呼び出しを行うことができます。自分で少し作業を行う必要がありますが、従来の AJAX を使用することで、WebForms の親指の下から少し抜け出すことができます。

IRequiresSessionStateあなたの例では、C# の部分は次のようになります (セッションを利用可能にする実装に注意してください)。

// something.ashx.cs
public class something : IHttpHandler, IRequiresSessionState {
    public void ProcessRequest(HttpContext context) {
        context.Response.ContentType = "application/json";
        context.Response.Write(JsonConvert.SerializeObject(context.Session["data"]));
    }

    public bool IsReusable { get { return false; } }
}

あなたのjavascript呼び出しは、このsomething.ashxファイルへの呼び出しになります:

jQuery.ajax({
    url: "something.ashx",
    type: "post",
    dataType: "json"
}).done(function(result) {
    console.log(result);
});

POST パラメーターはありませんが、ある場合は、それらを呼び出しに含めて、Requestハンドラーの から直接読み取る必要があります。

jQuery.ajax({
    ...
    data: { requestMessage: "Hello!" }
});


public void ProcessRequest(HttpContext context) {
    string requestMessage = context.Request["requestMessage"]; // Hello!
    ...etc...
}
于 2013-10-31T09:48:03.637 に答える