如何用静态方法调用非静态方法(使用WebControl)

本文关键字:静态方法 使用 WebControl 何用 调用 | 更新日期: 2023-09-27 18:20:52

我有以下代码片段。我只能在非静态方法中访问PbcTreeView,所以我在Page_Load期间调用它。但是,setTreeView()方法不能访问对象b,也不能调用buildTreeView(()方法。(根据WebMethod规则,setTreeView()必须是静态的,buildTreeView不能是静态的(因为它使用TreeView)。我怎么能让它做一些类似于我在方法中使用的b.buildTreeView()的事情?

感谢

protected void Page_Load(object sender, EventArgs e)
    {
        BuildPbcTree b = new BuildPbcTree(PbcTreeView);
    }
    [WebMethod]
    public static void setTreeView()
    {
        b.buildTreeView(); //how do I do this??
    }
    public class BuildTree
    {
        TreeView Tree;
        public BuildTree(TreeView t)
        {
            Tree = t;
        }
        public void buildTreeView() {...//implementation}
    }

如何用静态方法调用非静态方法(使用WebControl)

您可以将类的实例传递给静态方法。例如,在您的Page_Load:中

SetTreeView(b);

这假设您更改web方法以接受BuildTree类。

我假设PbcTreeView是页面上的一些控件。

那样的话,你就倒霉了。在AJAX调用(web方法)期间,不能修改服务器端控件。AJAX调用的使用方式如下:

  1. 您可以用JavaScript代码调用web方法
  2. web方法执行一些数据库查找或计算并返回结果
  3. 您的JavaScript代码会更新用户界面

您正在尝试在web方法内部更新用户界面。那行不通。如果需要这样做,请使用带有UpdatePanel的回发或异步回发。