我已经创建了一个特定的服务器控件,它有一些我想从javascript调用的方法。 我知道ScriptManager允许调用Web服务或页面方法。但是我想调用一个特定的类方法(我可以使用Anthem甚至是AjaxPro.NET)。有没有办法使用ScriptManager来完成这个?
感谢。
答案 0 :(得分:2)
该类需要作为Web服务公开。然后,您可以使用JSON访问它的客户端
例如: (在诸如Address.asmx之类的ASMX文件中)
[ScriptService]
[WebService(Namespace = "JsonPanels.Services")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Address : WebService {
[WebMethod]
public String LoadAddress() {
return "some values...";
} // webmethod::StoreValues
}
在aspx文件页面中,您需要一个引用Web服务的scriptmanager:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/Services/Address.asmx" />
</Services>
</asp:ScriptManager>
您的javascript函数将如下所示:
<script type="text/javascript">
function callLoadAddress() {
JsonPanels.Services.Address.LoadAddress(GetLoadAddress_success, OnFailed);
}
function GetLoadAddress_success(e) {
var result = e;
$get('resultAddress').innerHTML = result;
}
// --------------------------
function OnFailed() {
$get('resultFailed').innerHTML = "failed";
}
</script>
答案 1 :(得分:2)
除了Web服务(asmx或WCF),您还可以调用页面方法。这些是使用[WebService]属性修饰的页面的静态方法。您还需要将脚本管理器的EnablePageMethods属性设置为true。这是一个快速示例:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Services" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
[WebMethod]
public static int AddOne(int arg)
{
return arg + 1;
}
</script>
<html>
<head id="Head1" runat="server">
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1"
runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<script type="text/javascript">
function doAdd ()
{
PageMethods.AddOne(2);
}
</script>
<a href="javascript: doAdd()">click me</a>
</form>
</body>
</html>