在将页面从普通回发转换为 AJAX 调用的过程中(使用 JavaScript 完全加载/控制 UI 并严格使用 ASP.Net 作为后端),我发现自己想用 AJAX 来源的数据集替换 GridView。
我目前使用DataTables来美化 GridView,并且 API 中有一个选项可以使用 AJAX 远程获取表的数据。API 需要返回一个 JSON 对象,尽管我似乎可以为该fnServerData
选项提供一个回调,这将允许我将 XML 响应转换为必需的 JSON 数据源。
“所以”,我想,“我还不如一起来<WebMethod()>
返回数据源......”虽然我过去写过几个<WebMethod()>
函数,但我总是添加一个新的 ASMX 文件(带有一个自定义类驱动它)或在有意义的地方扩展现有的。对于这个特定的页面,不需要让这个表的数据源可以在页面的上下文之外访问,所以我想我会尝试添加<WebMethod()>
到 ASPX 页面的代码隐藏。
在程序员的网络上似乎有几个例子成功地完成了我一直在努力解决的问题。
我遵循了我能找到的每一个例子,但没有一个对我有用。我整理了一个非常简单的示例,希望有人可以指出我哪里出错了,或者确认 ASP.Net 2.0 根本无法以这种方式工作。
ASP 标记:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="AJAXText.aspx.vb" Inherits="_AJAXText" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
<script type="text/javascript" src='<%=Helpers.ToAbsoluteURL("~/_cs/js/jquery-1.6.4.min.js") %>'></script>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "POST",
url: window.location.href + "/Hello",
data: {
"What": "World"
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, textStatus, jqXHR) {
$('div').text(textStatus);
},
complete: function (jqXHR, textStatus) {
$('div').text(textStatus);
},
error: function (jqXHR, textStatus, errorThrown) {
$('div').text(textStatus);
}
});
});
</script>
</body>
</html>
代码隐藏:
Imports System.Web.Services
Partial Class _AJAXText
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function Hello(ByVal What As String) As String
Dim msg As String = "Hello, " & What & "!"
Return msg
End Function
End Class
我已经尝试了对上述内容的一些小改动,并且在每种情况下 AJAX 调用都会返回以下内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
</head>
<body>
<form name="form1" method="post" action="AJAXText.aspx?What=World%2fHello"
id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJOTU4MjMyMzI1ZGQT/2jrJ+cI2ERazl2Hw7l7TI5XiA==" />
</div>
<div></div>
</form>
<script type="text/javascript" src='http://localhost:3719/Maggie/_cs/js/jquery-1.6.4.min.js'></script>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "POST",
url: window.location.href + "/Hello",
data: {
"What": "World"
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, textStatus, jqXHR) {
$('div').text(textStatus);
},
complete: function (jqXHR, textStatus) {
$('div').text(textStatus);
},
error: function (jqXHR, textStatus, errorThrown) {
$('div').text(textStatus);
}
});
});
</script>
</body>
</html>
我期望返回的是:
<?xml version="1.0" encoding="utf-8"?>
<string>Hello, World!</string>
有没有人有任何想法:
- 我做错了什么?
- 还是 ASP.Net 2.0 无法
<WebMethod()>
在 ASPX 页面中使用 a?