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

时间:2011-09-02 16:01:40

标签: c# asp.net default class-method

我是asp.net的新手,我正在尝试创建网站。我在AppCode / GSA中有一个类,我需要访问default.aspx.cs中声明的事件处理程序。任何人都可以帮忙吗? 我尝试搜索它,但我得到的是在创建该类的实例后的标准方法调用,如classname.methodname()。请帮帮我。

这是我想要做的以及我需要在default.aspx.cs中调用该方法的原因

我正在调用GSA函数来制作html字符串,我用它来显示搜索结果。它工作得很好。现在我在显示的每个搜索前添加按钮。当用户单击此按钮时,该按钮应替换为textfield,并且它将包含该搜索结果的小URL。

现在我收到显示每个结果的按钮,我必须为该按钮分配事件处理程序。我尝试将该事件处理程序放在GSA.cs文件本身中,但该函数未被调用,因为它没有默认定义为什么我决定将该事件处理程序放在defalut.aspx.cs中

4 个答案:

答案 0 :(得分:2)

一般来说,事件处理程序不是应该在类之间共享的东西。如果您需要在两个地方使用相同的功能,那么将该功能拉出到自己的方法中并在事件处理程序中调用该方法:

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()放在哪里?”是一个只有知道它的具体细节的人才能有意义地回答的问题。您可以使它成为静态类的成员,这将使任何可以看到该类的代码都可以访问它。或者,如果它负责改变一组特定的值,您可以使它成为封装这些值的类的实例成员,并将该类的实例传递给需要调用该方法的任何人。

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

答案 1 :(得分:1)

你真的应该永远不会从其他代码调用事件处理程序。

我真的没有足够的信息可以继续,但我可以设想两个可能让你知道你应该这样做的场景:一个常见的页面场景和一个共享的业务逻辑场景。

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

如果您希望共享或实现业务逻辑,并且只是已经将它放在Default.aspx.cs类中,那么您需要重新考虑您的架构。即使您没有使用MVC方法,我强烈建议您使用三层方法处理除了最简单的网站之外的所有网站(一旦完成,其他工作都是微不足道的)。在这种情况下,您将创建实现业务逻辑的类,并仅使用代码隐藏代码进行UI工作。因此,典型的代码隐藏方法将从UI中提取一些内容,创建业务逻辑类并将其传递,然后处理结果(反之亦然)。在这种情况下,您将能够调用业务逻辑类来实现您想要从任何地方共享的代码 - 包括您的测试类。

答案 2 :(得分:1)

Default.aspx.cs 拖到包含所有其他类的 AppCode 文件夹,然后更改 Default.aspx中的CodeFile路径CodeFile="~/App_Code/Default.aspx.cs" 您现在应该可以像任何其他类一样访问它。

答案 3 :(得分:0)

这是你想要的吗?

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

在App_Code / 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;
    }
}

更新(OP要求的代码): 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 = pick();
    Response.Write(a);
    }
    protected string pick() 
    { 
    string test = "I need this";
    return test;
    }
    }