我正在尝试从ASP.NET Gridview行发送一个AJAX请求。 gridview中的每一行都显示已完成的作业。某些作业包含可以下载的文件。这里的最终目标是在彩盒覆盖中显示下载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中观看页面时,我看到请求转到GetFiles函数,订单号为{'orderID':'10000315'}
POST http://localhost:57210/AMSSite/Customer/CompletedOrdersNew.aspx/GetFiles
但调用不会触发GetFiles函数,而我得到的响应是页面html。
不确定这里发生了什么。
答案 0 :(得分:1)
尝试将orderID
作为数字发送,因为webmethod期望int,JSON键和字符串也引用双引号("
)
data: "{\"orderID\":" + orderID + "}",
答案 1 :(得分:1)
您在contentType
选项中输了一个拼写错误。应该是:contentType: "application/json; charset=utf-8"
答案 2 :(得分:0)
我会回答我的问题,因为其他任何VB.NET / ASP.NET人都遇到了这个问题。除了我的拼写错误之外,这里的问题是我的WebMethod功能是ByRef。它必须是 BYVAL 。在将我的头撞到墙上并阅读javascript和json服务的一些好东西后,我在http://projectsmm.com/technet/asp/index.shtml找到了真正的答案。 VB.Net默认将函数变量设置为ByRef。出于某种原因,.NET Web服务不接受这一点。改为ByVal并且有效。
希望这有助于其他人不花时间看我。