0

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

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

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

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

4

4 回答 4

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

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

于 2011-09-02T16:10:36.140 回答
1

将您的Default.aspx.cs与所有其他类一起拖到 AppCode 文件夹中,并将 Default.aspx 中的路径更改为现在CodeFile应该能够 像访问任何其他类一样访问它。CodeFile="~/App_Code/Default.aspx.cs"

于 2011-12-08T18:04:03.923 回答
1

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

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

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

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

于 2011-09-02T16:14:11.980 回答
0

这是你想要的吗?

默认.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;
    }
    }
于 2011-09-02T16:09:52.997 回答