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

尝试orderID以数字形式发送,因为您的 webmethod 需要一个 int,在 JSON 中,键和字符串也用双引号 ( ")引用

data: "{\"orderID\":" + orderID + "}",
于 2013-02-18T19:36:54.267 回答
1

你在contentType选项中打错了。应该:contentType: "application/json; charset=utf-8"

于 2013-02-18T20:03:02.783 回答
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 回答