2013-02-18 122 views
0

我试图从ASP.NET Gridview行发送AJAX请求。 gridview中的每一行显示已完成的作业。有些作业具有可下载的文件。这里的最终目标是显示一个colorbox覆盖图中的下载URL,但是我现在只是将文件列表返回到基页。要显示从订单下载文件,请取消隐藏订单号列中的按钮控件。页面上的Javascript如下。asp.net页面不返回ajax请求

$(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 

看着萤火虫的页面当我看到请求外出的GetFiles函数将订单号{“的orderID”:“10000315”}

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

但呼叫没有火GetFiles函数和我得到的响应是页面html。

不知道这里发生了什么。

回答

1

尝试发送orderID为数字,因为你的WebMethod需要int,也JSON键和字符串引述双引号("

data: "{\"orderID\":" + orderID + "}", 
+0

感谢您对数字格式的更正。我提出了更正建议,但仍然没有开启函数GetFiles,并且将页面html取回为我的响应。订单ID现在作为数字发送。 – DougM 2013-02-18 19:57:44

1

您在contentType选项做了一个错字。应该是:contentType: "application/json; charset=utf-8"

+0

+1这就是我的声音“贾森” – Musa 2013-02-18 20:04:44

+0

谢谢你。我有一个名叫杰森的朋友,所以经常这样做。现在我收到服务器错误消息无法将类型为\ u0027System.Int32 \ u0027的对象转换为\ u0027System.Int32&\ u0027“不太确定它告诉我什么。在网上查看一下后,似乎表明ASP。 NET不喜欢我的输入变量你有没有看到一个问题? – DougM 2013-02-18 20:58:30

+0

我似乎有一个问题,现在json格式化问题似乎与从服务器上收到什么转换到什么asp.net想要处理一个webmethod。错误是“不能转换类型\ u0027System.String \ u0027类型的对象来键入\ u0027System.String&\ u0027”我改变我的函数中的输入参数为字符串,看看是否有帮助,它没有。 – DougM 2013-02-19 00:05:50

0

我会回答我的问题,因为任何其他VB.NET/ASPP.NET人遇到这个问题。除了我的拼写错误,这里的问题是我的WebMethod函数是ByRef。它需要是BYVAL。在将我的头撞在墙上并阅读了一些关于javascript和json服务的好东西之后,我在http://projectsmm.com/technet/asp/index.shtml上找到了真正的答案。 VB.Net默认将函数变量设置为ByRef。出于某种原因,.NET Web服务不接受这一点。更改为ByVal,它可以工作。

希望这可以帮助别人不花我看了这个小时。