C# 从ASPX代码隐藏调用Web方法

C# 从ASPX代码隐藏调用Web方法,c#,asp.net,webmethod,C#,Asp.net,Webmethod,我试图找到一种方法,可以从另一个aspx代码隐藏页面调用Web方法(位于aspx页面代码隐藏中的公共静态方法) 这是A.aspx页面的代码隐藏 public partial class PageA : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // other code not relevant is here } [WebMethod(tr

我试图找到一种方法,可以从另一个aspx代码隐藏页面调用Web方法(位于aspx页面代码隐藏中的公共静态方法)

这是A.aspx页面的代码隐藏

public partial class PageA : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    // other code not relevant is here  
    }

    [WebMethod(true)]
    public static string GetStringInfo()
    {
         // do some stuff here to build my string
         // return string
    }
}
在页面B上,我需要能够在页面加载或其他事件期间调用GetStringInfo()来获取信息。GetStringInfo()相当复杂,由于我无法控制的原因,目前无法移动到其他位置或重建

如何从另一个页面的代码中使用上述web方法

我尝试过实例化另一个页面(PageB)的副本,例如:

public partial class PageB : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       PageA page = new PageA();
       page.GetStringInfo();        
    }
}
这里的问题是因为它是动态编译的,所以我没有一个容易引用和访问的名称空间。我尝试添加一个,但它忽略了它

此项目位于.NET3.5,C#上,是一个网站项目(不是web应用程序)


感谢您的帮助

如果
GetStringInfo
方法是静态的,则不需要
PageA
的实例来调用它:

public partial class PageB : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       string info = PageA.GetStringInfo();        
    }
}

如果
GetStringInfo
方法是静态的,则不需要调用
PageA
的实例:

public partial class PageB : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       string info = PageA.GetStringInfo();        
    }
}

它是静态的,用PageA.GetStringInfo()调用它;当前的代码片段会出现什么样的错误?我遇到的问题是它没有发现PageA甚至不存在。因此,当我尝试实例化页面时,它只要求我为它生成一个方法存根,而不是查找另一个页面的类?如果这两个类上没有声明名称空间,请尝试在同一名称空间中明确声明这两个页面。顺便说一句:这样使页面相互依赖的设计非常糟糕。一个页面应该依赖实体和逻辑,而不是另一个页面和它包含的控件。。。事实上,由于GetStringInfo是静态的,您甚至无法从中访问页面控件,它告诉您此类方法必须位于其他位置,而不是页面中;当前的代码片段会出现什么样的错误?我遇到的问题是它没有发现PageA甚至不存在。因此,当我尝试实例化页面时,它只要求我为它生成一个方法存根,而不是查找另一个页面的类?如果这两个类上没有声明名称空间,请尝试在同一名称空间中明确声明这两个页面。顺便说一句:这样使页面相互依赖的设计非常糟糕。一个页面应该依赖实体和逻辑,而不是另一个页面和它包含的控件。。。事实上,由于GetStringInfo是静态的,您甚至不能从它访问页面控件,它告诉您这样的方法必须在其他地方,而不是在页面中。当我尝试这样做时,这只是为PageA的类返回“在当前上下文中不存在”。@Delebrin,那么您并没有向我们展示所有内容。您所展示的代码应该按照我展示的方式工作。另外,如果
PageA
类是在与
PageB
不同的命名空间中定义的,请确保已将此命名空间纳入范围。顺便问一下,这两个页面在同一个ASP.NET应用程序中吗?它们都在同一个网站解决方案中。它不是一个真正的web应用程序,我认为这是问题的一部分。我可以将名称空间明确地添加到这两个页面中,但名称空间被忽略,因为页面是动态编译的。@Delebrin,如果它是一个网站,您可能在设计时在Visual Studio中遇到错误。别理他们。运行您的站点。它会起作用的。问题是,在一个网站中,没有在设计时编译的程序集。因此,当您在PageB中时,VS设计器并不真正知道PageA包含什么。这很愚蠢,但你不应该担心。您不会获得任何Intellisense,但当您运行站点时,您甚至可以在其中放置断点以确保其正常工作。我怀疑您对智能感知的缺乏感到困惑。当我尝试这样做时,这只是为PageA的类返回“在当前上下文中不存在”。@Delebrin,那么您并没有向我们展示所有内容。您所展示的代码应该按照我展示的方式工作。另外,如果
PageA
类是在与
PageB
不同的命名空间中定义的,请确保已将此命名空间纳入范围。顺便问一下,这两个页面在同一个ASP.NET应用程序中吗?它们都在同一个网站解决方案中。它不是一个真正的web应用程序,我认为这是问题的一部分。我可以将名称空间明确地添加到这两个页面中,但名称空间被忽略,因为页面是动态编译的。@Delebrin,如果它是一个网站,您可能在设计时在Visual Studio中遇到错误。别理他们。运行您的站点。它会起作用的。问题是,在一个网站中,没有在设计时编译的程序集。因此,当您在PageB中时,VS设计器并不真正知道PageA包含什么。这很愚蠢,但你不应该担心。您不会获得任何Intellisense,但当您运行站点时,您甚至可以在其中放置断点以确保其正常工作。我怀疑你被缺乏理智弄糊涂了。