C# 如何从另一个类调用Default.aspx.cs中定义的方法

C# 如何从另一个类调用Default.aspx.cs中定义的方法,c#,asp.net,default,class-method,C#,Asp.net,Default,Class Method,我对asp.net相当陌生,我正在尝试创建一个网站。我在AppCode/GSA中有一个类,需要在其中访问default.aspx.cs中声明的事件处理程序。有人能帮忙吗? 我试着搜索它,但在创建了一个类的实例之后,我得到的只是标准方法调用,比如classname.methodname()。请帮帮我 下面是我想做的事情,以及我需要在default.aspx.cs中调用该方法的原因 using System; using System.Collections.Generic; using Syste

我对asp.net相当陌生,我正在尝试创建一个网站。我在AppCode/GSA中有一个类,需要在其中访问default.aspx.cs中声明的事件处理程序。有人能帮忙吗? 我试着搜索它,但在创建了一个类的实例之后,我得到的只是标准方法调用,比如classname.methodname()。请帮帮我

下面是我想做的事情,以及我需要在default.aspx.cs中调用该方法的原因

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string a = Class1.ctest();
        Response.Write(a);
    }
}
我调用GSA函数来生成html字符串,我用它来在PlaceHolder中显示搜索结果。它工作得非常好。现在我在显示的每个搜索前添加按钮。当用户单击此按钮时,该按钮应替换为textfield,它将包含搜索结果的微小url

现在我得到了显示每个结果的按钮,我必须为该按钮分配事件处理程序。我尝试将该事件处理程序放在GSA.cs文件本身中,但该函数没有被调用,因为它在默认情况下没有定义,所以我决定将该事件处理程序放在defalut.aspx.cs中,这是您想要的吗

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string a = Class1.ctest();
        Response.Write(a);
    }
}
应用程序内代码/Class1.cs

using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    public Class1()
    {

    }
    public static string ctest()
    {
        string test = "I need this";
        return test;
    }
}
这是你想要的吗

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string a = Class1.ctest();
        Response.Write(a);
    }
}
应用程序内代码/Class1.cs

using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    public Class1()
    {

    }
    public static string ctest()
    {
        string test = "I need this";
        return test;
    }
}

一般来说,事件处理程序不应该在类之间共享。如果您需要在两个位置使用相同的功能,则将该功能提取到其自己的方法中,并在事件处理程序中调用该方法:

private void MyEventHandler(object sender, EventArgs e)
{
    // some complex functionality
}
应成为:

public void DoComplexFunctionality()
{
    // some complex functionality
}

private void MyEventHandler(object sender, EventArgs e)
{
    DoComplexFunctionality();
}
“我应该把
DoComplexFunctionality()
”放在哪里?”这个问题只能由了解其具体功能的人来有意义地回答。您可以使它成为静态类的成员,这将使任何可以看到该类的代码都可以访问它。或者,如果它负责改变一组特定的值,您可以使其成为封装这些值的类的实例成员,并将该类的实例传递给需要调用该方法的任何人


在任何情况下,尝试直接调用事件处理程序都不是正确的做法。

一般来说,事件处理程序不应该在类之间共享。如果您需要在两个位置使用相同的功能,则将该功能提取到其自己的方法中,并在事件处理程序中调用该方法:

private void MyEventHandler(object sender, EventArgs e)
{
    // some complex functionality
}
应成为:

public void DoComplexFunctionality()
{
    // some complex functionality
}

private void MyEventHandler(object sender, EventArgs e)
{
    DoComplexFunctionality();
}
“我应该把
DoComplexFunctionality()
”放在哪里?”这个问题只能由了解其具体功能的人来有意义地回答。您可以使它成为静态类的成员,这将使任何可以看到该类的代码都可以访问它。或者,如果它负责改变一组特定的值,您可以使其成为封装这些值的类的实例成员,并将该类的实例传递给需要调用该方法的任何人


在任何情况下,尝试直接调用事件处理程序都不是一个好办法。

您真的不应该从其他代码调用事件处理程序

我真的没有足够的信息继续下去,但我可以设想两个场景,这可能会让您产生这样做的想法:一个公共页面场景和一个共享业务逻辑场景

如果您希望在多个页面中使用一些代码块,那么我强烈建议您创建一个从“Page”类派生的父类,并将所有公共代码放在其中。这与主从关系不同;这只是一种实现所有页面都将使用的代码的方法。例如,我使用父类管理强类型会话类


如果您希望共享或实现业务逻辑,而碰巧您已经将其放在Default.aspx.cs类中,那么您需要重新考虑您的体系结构。即使您没有使用MVC方法,我也强烈建议您使用三层方法来处理所有站点,但最琐碎的站点除外(一旦您完成了,额外的工作就很简单)。在本例中,您将创建实现业务逻辑的类,并且仅将代码隐藏代码用于UI工作。因此,典型的代码隐藏方法将从UI中提取一些内容,创建一个业务逻辑类并将其传入,然后处理结果(反之亦然)。在这种情况下,您将能够从任何地方(包括测试类)调用实现要共享的代码的业务逻辑类。

您真的不应该从其他代码调用事件处理程序

我真的没有足够的信息继续下去,但我可以设想两个场景,这可能会让您产生这样做的想法:一个公共页面场景和一个共享业务逻辑场景

如果您希望在多个页面中使用一些代码块,那么我强烈建议您创建一个从“Page”类派生的父类,并将所有公共代码放在其中。这与主从关系不同;这只是一种实现所有页面都将使用的代码的方法。例如,我使用父类管理强类型会话类

如果您希望共享或实现业务逻辑,而碰巧您已经将其放在Default.aspx.cs类中,那么您需要重新考虑您的体系结构。即使您没有使用MVC方法,我也强烈建议您使用三层方法来处理所有站点,但最琐碎的站点除外(一旦您完成了,额外的工作就很简单)。在本例中,您将创建实现业务逻辑的类,并且仅将代码隐藏代码用于UI工作。因此,典型的代码隐藏方法将从UI中提取一些内容,创建一个业务逻辑类并将其传入,然后处理结果(反之亦然)。在本例中,您将能够调用