如何使用ScriptManager调用特定的类方法

时间:2009-03-11 14:08:36

标签: asp.net asp.net-ajax

我已经创建了一个特定的服务器控件,它有一些我想从javascript调用的方法。 我知道ScriptManager允许调用Web服务或页面方法。但是我想调用一个特定的类方法(我可以使用Anthem甚至是AjaxPro.NET)。有没有办法使用ScriptManager来完成这个?

感谢。

2 个答案:

答案 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>
相关问题