从WebMethod访问函数后面的代码

时间:2011-02-09 22:22:41

标签: asp.net

我的页面后面有一些代码,有几种方法;其中一个是页面方法。

[WebMethod]
public static void ResetDate(DateTime TheNewDate)
{
    LoadCallHistory(TheNewDate.Date);
}

protected void LoadCallHistory(DateTime TheDate)
{ bunch of stuff }

方法LoadCallHistory在页面加载时工作正常,我可以从页面内的其他方法调用它。但是,在Web方法部分中,它以红色加下划线,并显示错误“非静态字段需要对象引用”。

如何从代码的页面方法部分访问函数?

感谢。

2 个答案:

答案 0 :(得分:12)

如果没有类的实例,则无法从静态上下文中调用非静态方法。从static移除ResetDate或将LoadCallHistory设为静态。

但是,如果从static中删除ResetDate,则必须拥有该实例才能使用该方法。另一种方法是在ResetDate中创建类的实例,并使用该实例调用LoadCallHistory,如下所示:

[WebMethod]
public static void ResetDate(DateTime TheNewDate)
{
    var callHistoryHandler = new Pages_CallHistory();
    callHistoryHandler.LoadCallHistory(TheNewDate.Date);
}

错误消息表明ResetDate的关键字为staticLoadCallHistory没有关键字static。当使用静态时,两个方法都需要是静态的,或者被调用的方法需要是{{1}},如果被调用的方法不是,则调用者不能是静态的。

"Static Classes and Static Class Members"

上引用MSDN
  

静态类基本相同   作为非静态类,但有   一个区别:静态类不能   被实例化。换句话说,你   无法使用new关键字创建   类类型的变量。因为   没有实例变量,你   访问静态类的成员   通过使用类名本身。

答案 1 :(得分:1)

由于这是static方法,因此只能调用其他static方法或新对象。

如果您的网页课程为CallHistory(有教养的猜测;)),您需要这样做:

[WebMethod]
public static void ResetDate(DateTime TheNewDate)
{
    var thisPage = new CallHistory();
    thisPage.LoadCallHistory(TheNewDate.Date);
}

或将LoadCallHistory更改为static