0

ASP.NET Gridview 行から AJAX 要求を送信しようとしています。グリッドビューの各行には、完了したジョブが表示されます。一部のジョブには、ダウンロード可能なファイルがあります。ここでの最終目標は、ダウンロード URL をカラーボックス オーバーレイに表示することですが、現在、ファイルのリストをベース ページに戻すだけで問題が発生しています。注文からダウンロードするファイルがあることを示すために、注文番号列のボタン コントロールを再表示します。ページの Javascript は次のとおりです。

  $(document).ready(function () {
    $("#<%=gvMessenger.ClientID%> input").filter(":not(:has(table, th))").click(function (e) {

        e.preventDefault();
         var $cell = $(e.target).closest("td");
        //$("#<%=gvMessenger.ClientID%> td").removeClass("highlight"); $cell.addClass("highlight"); $("#message").text('You have selected: ' + $cell.text());
        $("#Message").html("");

        var orderID = $cell.text()
        orderID = $.trim(orderID);
        sendData(orderID);
        function sendData(orderID) {
            var loc = window.location.href;
            loc = (loc.substr(loc.length - 1, 1) == "/") ?
            loc + "CompletedOrdersNew.aspx" : loc;
            $.ajax({
                type: "POST",
                url: loc + "/GetFiles",
                data: "{'orderID':'" + orderID + "'}",
                contentType: "application/jason; charset=utf-8",
                datatype: "json",
                success: function (msg) {
                    $("ContentArea").html(msg.d);
                },
                error: function () {
                    alert("An error occured in getting your files.");
                }
            });
        }
    });
}); 

ajax リクエストで起動する必要があるページ分離コードの関数は次のとおりです。

    <WebMethod()> _
Public Shared Function GetFiles(ByRef orderID As Integer) As String
    Dim dict As New Dictionary(Of String, Object)
    Dim dt As DataTable
    dt = Dac.ExecuteDataTable("GetS3Files", Parameter("@OrderID", orderID))
    Dim arrr(dt.Rows.Count) As Object

    For i As Integer = 0 To dt.Rows.Count - 1
        arrr(i) = dt.Rows(i).ItemArray
    Next

    Dim json As New JavaScriptSerializer
    Return json.Serialize(dict)

End Function

FireBug でページを見ると、リクエストが orderID 番号 {'orderID':'10000315'} で GetFiles 関数に送信されているのがわかります

POST http://localhost:57210/AMSSite/Customer/CompletedOrdersNew.aspx/GetFiles

しかし、呼び出しは GetFiles 関数を起動せず、取得している応答はページの html です。

ここで何が起こっているのかわかりません。

4

3 に答える 3

1

contentTypeオプションでタイプミスをしました。次のようにする必要があります。contentType: "application/json; charset=utf-8"

于 2013-02-18T20:03:02.783 に答える
1

orderIDwebmethod は int を想定しているため、数値として送信してみてください。また、JSON キーと文字列は二重引用符で囲まれています ( ")

data: "{\"orderID\":" + orderID + "}",
于 2013-02-18T19:36:54.267 に答える
0

この問題に遭遇した他の VB.NET/ASP.NET 関係者のために、私の質問にお答えします。ここでのスペルミスはさておき、ここでの問題は、WebMethod 関数が ByRef であったことです。BYVALである必要があります。壁に頭をぶつけて、javascript と json サービスに関するいくつかの素晴らしいものを読んだ後、http://projectsmm.com/technet/asp/index.shtmlで本当の答えを見つけました。VB.Net はデフォルトで関数変数を ByRef に設定します。何らかの理由で、.NET Web サービスはこれを受け入れません。ByVal に変更すると動作します。

これが、私がこれを見た時間を他の人が費やさないようにするのに役立つことを願っています.

于 2013-02-19T04:42:43.283 に答える