我是asp.net的新手,我正在尝试创建网站。我在AppCode / GSA中有一个类,我需要访问default.aspx.cs中声明的事件处理程序。任何人都可以帮忙吗? 我尝试搜索它,但我得到的是在创建该类的实例后的标准方法调用,如classname.methodname()。请帮帮我。
这是我想要做的以及我需要在default.aspx.cs中调用该方法的原因
我正在调用GSA函数来制作html字符串,我用它来显示搜索结果。它工作得很好。现在我在显示的每个搜索前添加按钮。当用户单击此按钮时,该按钮应替换为textfield,并且它将包含该搜索结果的小URL。
现在我收到显示每个结果的按钮,我必须为该按钮分配事件处理程序。我尝试将该事件处理程序放在GSA.cs文件本身中,但该函数未被调用,因为它没有默认定义为什么我决定将该事件处理程序放在defalut.aspx.cs中
答案 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;
}
}