2011-06-16 111 views
2

我后面的aspx文件的文件中的代码看起来像这样的时候:访问页面的方法访问页面与页面方法

public partial class Pages_MyPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    ..... 
    } 

    protected int MyMethod() 
    { 
    ..... 
    } 

    [WebMethod] 
    public static int MyPageMethod() 
    { 
    int x = MyMethod(); 
    return x; 
    } 

} 

当我送一个AJAX POST到MyPageMethod,我可以”访问MyMethod。解决这个问题的方法是什么。

感谢您的建议。

回答

1

的WebMethods是static方法,因为他们没有得到一个完整的Page

他们只能调用其他方法static

+0

好,非常感谢,这使得它很容易。 – frenchie 2011-06-16 20:35:13

2

MyMethod还需要是静态的。

想想你想在这里做 -

MyMethod属于类的特定实例

MyPageMethod属于本身。

如果里面MyPageMethod你运行的代码,你怎么可能知道如何调用该对象的其他一些实例方法。方法可能不存在于代码中的那一点。

如果你正试图从的JavaScript变异页面的数据的某些部分,你有页如何asp.net工作的深刻误解。

在点javascript正在浏览器中运行,您的页面对象不见了。服务器完成了页面加载并丢弃它。在接下来的后回它会创建一个新的实例,并通过页面生命周期再次运行。

如果您需要访问页面的水平状态,你必须把它保存在一个地方,那就是后背上,比如Session对象之间可以接受的,与System.Web.HttpContext.Current

+0

谢谢;我没有从JavaScript中改变页面,我只是写了一个Ajax回调。我将添加他静态关键字,使其工作。 – frenchie 2011-06-16 20:34:49

+0

事实上,PageMethods是静态的,完全绕过了页面生命周期。实际上没有任何页面生命周期,因为Page类的实例从未被创建。 – 2011-06-16 21:14:16