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

本文关键字:aspx 定义 方法 Default 调用 另一个 | 更新日期: 2023-09-27 18:07:16

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

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

我正在调用GSA函数来生成html字符串,我正在使用该字符串在占位符中显示搜索结果。它非常好用。现在我在显示的每个搜索前面添加按钮。当用户点击这个按钮时,该按钮应该被文本字段取代,它将包含该搜索结果的微小url。

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

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

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

无论如何,尝试直接调用事件处理程序是不可取的。

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

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

我真的没有足够的信息来继续,但我可以设想两种场景,它们可能会让你产生应该这样做的想法:公共页面场景和共享业务逻辑场景。

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

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

Default.aspx。cs与所有其他类一起拖到AppCode文件夹中,并将Default.aspx中的CodeFile路径更改为CodeFile="~/App_Code/Default.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;
    }
}

更新(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;
    }
    }