当前位置:编程学习 > C#/ASP.NET >>

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

[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中实例化对象是不行的,请高手求解,谢谢 
--------------------编程问答-------------------- 定义一个静态方法A,把非静态方法中的实例部分做为参数传给A,在A内部处理。 --------------------编程问答-------------------- 将对象实例作为参数传递给test方法。 --------------------编程问答-------------------- lz解释了... --------------------编程问答-------------------- webservice ?
静态方法有什么用? --------------------编程问答-------------------- 补充一点:静态方法实在js中调用的,顺序是js调用静态方法,静态方法调用非静态方法 --------------------编程问答-------------------- 能用js调用?
静态方法没有context,根本不满足web的应用场景, 能调用吗? --------------------编程问答-------------------- 想再js中实现数据绑定?你的想法不好,js调用静态方法是为了实现ajax异步数据传输,不是这样用的 --------------------编程问答-------------------- 不好意思,没用过js调用方法,查了一下还真是必须是静态方法,那这个方法是跟这个类本身没多大关系的,所以
参数还是自己穿进去吧,静态方法是没有this的。 --------------------编程问答--------------------
引用 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,然后来调用呢? --------------------编程问答-------------------- 因为你没有理解ajax ,所以现在的思路是错误的



--------------------编程问答-------------------- 你可以这样

[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();
  }
} --------------------编程问答--------------------
引用 9 楼 orain 的回复:
引用 6 楼 charles_y 的回复:

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

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


我原来以为你用的是 webservice --------------------编程问答-------------------- 静态方法 不能直接调用 非静态方法,但 通过实例化对象 应该能调用

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();
  }
}

--------------------编程问答-------------------- 如果不行,能不能给出解决方案啊,谢谢 --------------------编程问答-------------------- ajax方式填充GridView

http://blog.csdn.net/sandy945/article/details/6925893

Repeater 无刷新分页

http://blog.csdn.net/sandy945/article/details/4208998 --------------------编程问答-------------------- 楼上的那些实例化NEW我都试过了,虽然程序没报错,但运行后没达到效果,没用。

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

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

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


上面还有人说将对象实例作为参数传递给test方法,这个不知道具体是什么意思,能不能提供简单的代码。。。。。
--------------------编程问答-------------------- 不知道你们想问的是什么?
调用不了,就实例化一下,变通一下不就可以了 --------------------编程问答--------------------
引用 17 楼  的回复:
不知道你们想问的是什么?
调用不了,就实例化一下,变通一下不就可以了


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



把要调用的方法也写静态的   --------------------编程问答--------------------
引用 19 楼 zanychou 的回复:
把要调用的方法也写静态的


如果吧调用的方法也写静态的,干嘛还纠结这个问题 --------------------编程问答--------------------
引用 11 楼 net_lover 的回复:
你可以这样

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

public class TestClass
{
 private voi……



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


发帖时间 2011-12-16  ,lz这个是11年的帖,你现在还在纠结这个问题。。。 --------------------编程问答-------------------- 作为低手   我只好看看 --------------------编程问答-------------------- 想调用非静态的方法应该是想给服务器控件绑定数据吧,不过很可惜,不管怎么实例化都没办法调用到页面的服务器控件
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,