ASP.NET从JS AJAX调用非静态webmethod

use*_*174 7 javascript asp.net

可能重复:
从客户端调用服务器端的非静态方法(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 
}
Run Code Online (Sandbox Code Playgroud)

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

[WebMethod]
public FooObj GetFooObj ()
{
    // some code that returns FooObj 
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*ayC 11

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

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

对于使用实例方法(假设您需要控制访问权限),您应该使用UpdatePanel方式来执行AJAX.