100分 高手进 asp.net后台静态方法怎么调用非静态方法

时间:2021-02-23 19:29:42
[WebMethod]
    public static void test()
    {
        GetDictionaryInfoByCondition();//出问题,静态方法不能直接调用非静态方法,实例化不行
    }

在WebMethod中怎么调用同页面的GetDictionaryInfoByCondition()方法,实例化不行

    private void GetDictionaryInfoByCondition()
    {
        DataTable dtPatientInfos = RelatedDictionaryInfoManager.GetDictionaryInfoByCondition(AspNetPager1.StartRecordIndex - 1, AspNetPager1.PageSize);
        //绑定数据
        this.gvDictionaryInfos.DataSource = dtPatientInfos;
        this.gvDictionaryInfos.DataBind();
    }

在test中实例化对象是不行的,请高手求解,谢谢 

24 个解决方案

#1


定义一个静态方法A,把非静态方法中的实例部分做为参数传给A,在A内部处理。

#2


将对象实例作为参数传递给test方法。

#3


lz解释了...

#4


webservice ?
静态方法有什么用?

#5


补充一点:静态方法实在js中调用的,顺序是js调用静态方法,静态方法调用非静态方法

#6


能用js调用?
静态方法没有context,根本不满足web的应用场景, 能调用吗?

#7


想再js中实现数据绑定?你的想法不好,js调用静态方法是为了实现ajax异步数据传输,不是这样用的

#8


不好意思,没用过js调用方法,查了一下还真是必须是静态方法,那这个方法是跟这个类本身没多大关系的,所以
参数还是自己穿进去吧,静态方法是没有this的。

#9


引用 6 楼 charles_y 的回复:
能用js调用?
静态方法没有context,根本不满足web的应用场景, 能调用吗?

谁说静态方法不能访问 context,HttpContext.Current 就是当前的 context,只要请求进了 Http 管线,就可以访问到 context,不管是静态还是非静态方法。
只不过楼主没有弄清楚一个问题,Ajax 请求和原有的请求根本就不是同一个请求,你用另外一个请求来刷新原有页面,必须在前台用 JS 来重新填充需要填充的节点。
至于静态方法要调用非静态方法,那得在静态方法中实例化一个当前类的对象,比如当前页面类是 _Default:
_Default d = new _Default();
d.GetDictionaryInfoByCondition();
这个跟 ASP.NET 没关系,不过是 C# 的基础知识而已。
不过楼主的这个结构做得可不好,为什么要做成一个 WebService,然后来调用呢?

#10


因为你没有理解ajax ,所以现在的思路是错误的



#11


你可以这样

[System.Web.Services.WebMethod]
public static void test()
{
  TestClass x = new TestClass();
  x.GetDictionaryInfoByCondition();
}

public class TestClass
{
 private void GetDictionaryInfoByCondition()
  {
  DataTable dtPatientInfos = RelatedDictionaryInfoManager.GetDictionaryInfoByCondition(AspNetPager1.StartRecordIndex - 1, AspNetPager1.PageSize);
  //绑定数据
  this.gvDictionaryInfos.DataSource = dtPatientInfos;
  this.gvDictionaryInfos.DataBind();
  }
}

#12


引用 9 楼 orain 的回复:
引用 6 楼 charles_y 的回复:

能用js调用?
静态方法没有context,根本不满足web的应用场景, 能调用吗?

谁说静态方法不能访问 context,HttpContext.Current 就是当前的 context,只要请求进了 Http 管线,就可以访问到 context,不管是静态还是非静态方法。
只不过楼主没有弄清楚一个问题,Ajax 请求和原有的请求根……


我原来以为你用的是 webservice

#13


静态方法 不能直接调用 非静态方法,但 通过实例化对象 应该能调用

public  class xxx
{
 public static void test()
  {
    new xxx().GetDictionaryInfoByCondition();
  }

   private void GetDictionaryInfoByCondition()
  {
  DataTable dtPatientInfos = RelatedDictionaryInfoManager.GetDictionaryInfoByCondition(AspNetPager1.StartRecordIndex - 1, AspNetPager1.PageSize);
  //绑定数据
  this.gvDictionaryInfos.DataSource = dtPatientInfos;
  this.gvDictionaryInfos.DataBind();
  }
}

#14


如果不行,能不能给出解决方案啊,谢谢

#16


楼上的那些实例化NEW我都试过了,虽然程序没报错,但运行后没达到效果,没用。

我也遇到和楼主同样的问题,现在仍然没有解决,也试过很多方法都不行,总觉得还是应该怎么在静态方法中把非静态的一些属性字段比如sqldatareader这些给引用才行,但不知道怎么引用。

楼主用的是前台JS中ajax传递到后台的某一个方法中,这个方法必须是静态的,而在这个静态方法中要进行一系列数据操作,可问题就在这里,静态方法里面很多非静态的都用不了。

NER实例化,然后调用普通方法,按道理这种是最容易想到的而且最合适的,很可惜没有效果。


上面还有人说将对象实例作为参数传递给test方法,这个不知道具体是什么意思,能不能提供简单的代码。。。。。

#17


不知道你们想问的是什么?
调用不了,就实例化一下,变通一下不就可以了

#18


引用 17 楼  的回复:
不知道你们想问的是什么?
调用不了,就实例化一下,变通一下不就可以了


就是因为实例化也没有效果所以才问的,我和LZ遇到的问题一样,不信兄台可以自己试下。程序没问题,但就是没效果,比如在静态里面实例化sqldatareader,结果读不出数据。

#19






把要调用的方法也写静态的  

#20


引用 19 楼 zanychou 的回复:
把要调用的方法也写静态的


如果吧调用的方法也写静态的,干嘛还纠结这个问题

#21


引用 11 楼 net_lover 的回复:
你可以这样

[System.Web.Services.WebMethod]
public static void test()
{
  TestClass x = new TestClass();
  x.GetDictionaryInfoByCondition();
}

public class TestClass
{
 private voi……



。实例化后,非静态方法是执行不了的。。。虽然不会报错

#22





发帖时间 2011-12-16  ,lz这个是11年的帖,你现在还在纠结这个问题。。。

#23


作为低手   我只好看看

#24


想调用非静态的方法应该是想给服务器控件绑定数据吧,不过很可惜,不管怎么实例化都没办法调用到页面的服务器控件

#1


定义一个静态方法A,把非静态方法中的实例部分做为参数传给A,在A内部处理。

#2


将对象实例作为参数传递给test方法。

#3


lz解释了...

#4


webservice ?
静态方法有什么用?

#5


补充一点:静态方法实在js中调用的,顺序是js调用静态方法,静态方法调用非静态方法

#6


能用js调用?
静态方法没有context,根本不满足web的应用场景, 能调用吗?

#7


想再js中实现数据绑定?你的想法不好,js调用静态方法是为了实现ajax异步数据传输,不是这样用的

#8


不好意思,没用过js调用方法,查了一下还真是必须是静态方法,那这个方法是跟这个类本身没多大关系的,所以
参数还是自己穿进去吧,静态方法是没有this的。

#9


引用 6 楼 charles_y 的回复:
能用js调用?
静态方法没有context,根本不满足web的应用场景, 能调用吗?

谁说静态方法不能访问 context,HttpContext.Current 就是当前的 context,只要请求进了 Http 管线,就可以访问到 context,不管是静态还是非静态方法。
只不过楼主没有弄清楚一个问题,Ajax 请求和原有的请求根本就不是同一个请求,你用另外一个请求来刷新原有页面,必须在前台用 JS 来重新填充需要填充的节点。
至于静态方法要调用非静态方法,那得在静态方法中实例化一个当前类的对象,比如当前页面类是 _Default:
_Default d = new _Default();
d.GetDictionaryInfoByCondition();
这个跟 ASP.NET 没关系,不过是 C# 的基础知识而已。
不过楼主的这个结构做得可不好,为什么要做成一个 WebService,然后来调用呢?

#10


因为你没有理解ajax ,所以现在的思路是错误的



#11


你可以这样

[System.Web.Services.WebMethod]
public static void test()
{
  TestClass x = new TestClass();
  x.GetDictionaryInfoByCondition();
}

public class TestClass
{
 private void GetDictionaryInfoByCondition()
  {
  DataTable dtPatientInfos = RelatedDictionaryInfoManager.GetDictionaryInfoByCondition(AspNetPager1.StartRecordIndex - 1, AspNetPager1.PageSize);
  //绑定数据
  this.gvDictionaryInfos.DataSource = dtPatientInfos;
  this.gvDictionaryInfos.DataBind();
  }
}

#12


引用 9 楼 orain 的回复:
引用 6 楼 charles_y 的回复:

能用js调用?
静态方法没有context,根本不满足web的应用场景, 能调用吗?

谁说静态方法不能访问 context,HttpContext.Current 就是当前的 context,只要请求进了 Http 管线,就可以访问到 context,不管是静态还是非静态方法。
只不过楼主没有弄清楚一个问题,Ajax 请求和原有的请求根……


我原来以为你用的是 webservice

#13


静态方法 不能直接调用 非静态方法,但 通过实例化对象 应该能调用

public  class xxx
{
 public static void test()
  {
    new xxx().GetDictionaryInfoByCondition();
  }

   private void GetDictionaryInfoByCondition()
  {
  DataTable dtPatientInfos = RelatedDictionaryInfoManager.GetDictionaryInfoByCondition(AspNetPager1.StartRecordIndex - 1, AspNetPager1.PageSize);
  //绑定数据
  this.gvDictionaryInfos.DataSource = dtPatientInfos;
  this.gvDictionaryInfos.DataBind();
  }
}

#14


如果不行,能不能给出解决方案啊,谢谢

#15


#16


楼上的那些实例化NEW我都试过了,虽然程序没报错,但运行后没达到效果,没用。

我也遇到和楼主同样的问题,现在仍然没有解决,也试过很多方法都不行,总觉得还是应该怎么在静态方法中把非静态的一些属性字段比如sqldatareader这些给引用才行,但不知道怎么引用。

楼主用的是前台JS中ajax传递到后台的某一个方法中,这个方法必须是静态的,而在这个静态方法中要进行一系列数据操作,可问题就在这里,静态方法里面很多非静态的都用不了。

NER实例化,然后调用普通方法,按道理这种是最容易想到的而且最合适的,很可惜没有效果。


上面还有人说将对象实例作为参数传递给test方法,这个不知道具体是什么意思,能不能提供简单的代码。。。。。

#17


不知道你们想问的是什么?
调用不了,就实例化一下,变通一下不就可以了

#18


引用 17 楼  的回复:
不知道你们想问的是什么?
调用不了,就实例化一下,变通一下不就可以了


就是因为实例化也没有效果所以才问的,我和LZ遇到的问题一样,不信兄台可以自己试下。程序没问题,但就是没效果,比如在静态里面实例化sqldatareader,结果读不出数据。

#19






把要调用的方法也写静态的  

#20


引用 19 楼 zanychou 的回复:
把要调用的方法也写静态的


如果吧调用的方法也写静态的,干嘛还纠结这个问题

#21


引用 11 楼 net_lover 的回复:
你可以这样

[System.Web.Services.WebMethod]
public static void test()
{
  TestClass x = new TestClass();
  x.GetDictionaryInfoByCondition();
}

public class TestClass
{
 private voi……



。实例化后,非静态方法是执行不了的。。。虽然不会报错

#22





发帖时间 2011-12-16  ,lz这个是11年的帖,你现在还在纠结这个问题。。。

#23


作为低手   我只好看看

#24


想调用非静态的方法应该是想给服务器控件绑定数据吧,不过很可惜,不管怎么实例化都没办法调用到页面的服务器控件