8

可能重复:
从客户端调用服务器端(aspx.cs)中的非静态方法使用javascript(aspx)

我有以下代码可以正常工作

function getFooObj() {
    $.ajax({
        type: "POST",
        url: "Dummy.aspx/GetFooObj",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
           alert('good');
        }
    });
}

[WebMethod]
public static FooObj GetFooObj ()
{
    // some code that returns FooObj 
}

我的问题是,如果我希望我的 WebMethod 不是静态的,我该如何从 JS 调用它?

[WebMethod]
public FooObj GetFooObj ()
{
    // some code that returns FooObj 
}
4

3 回答 3

11

不可能 - PageMethods 必须是静态的。

原因很简单——实例(非静态)方法意味着它可以访问页面状态,包括控件。但是,ASP.NET 页面/控件模型需要状态信息(视图状态、事件验证等)来确保控件的一致状态。但是在页面方法的情况下,这是不可能的,因为没有回发完整的表单(这本质上是 PageMethods/ScriptServices 背后的想法 - 您仅在客户端/服务器之间发送/接收最少的信息)。

对于使用实例方法(假设您需要控制访问),您应该使用 UpdatePanel 方式进行 AJAX。

于 2013-01-24T12:19:02.213 回答
3

它只支持静态方法的原因是页面实例化没有完成,如果你想使用非静态 web 方法然后去 web service(.asmx)。

于 2013-01-24T12:39:39.777 回答
0

为什么不实现一个简单的 Web 服务?你可以从这里找到一个很好的例子

于 2013-01-24T12:31:38.097 回答