【问题标题】:Call aspx class from class in App_Code从 App_Code 中的类调用 aspx 类
【发布时间】:2014-02-20 17:59:50
【问题描述】:

我知道可以从我的 Web-Form 类中使用 App_Code 文件夹中的类。 但是,是否可以从 App_Code 中的类调用我的 Web-Form 类?

怎么做?

谢谢

【问题讨论】:

  • 你能解释一下你为什么要这样做吗?
  • 我正在将一个 winform 项目迁移到一个 asp.net 项目。而且很多类都使用winform类
  • 你会发现你需要在更深层次上重新思考一些事情。
  • 这就是我问的原因。
  • 我使用 C#,两个项目都是 v4

标签: c# asp.net class webforms app-code


【解决方案1】:

记住:在网络上工作时,一切都发生在请求/响应的上下文中。您想要做的是为您的 App_Code 中需要查看您的网络表单的任何方法提供该上下文。这些方法将需要一个额外的HttpContext 参数,如下所示:

public void AppCodeMethod(HttpContext currentContext)

这将使您能够访问上下文的 RequestResponse 属性。您也可以让这些方法接受 webform 类的实例,但通常当我看到这种情况时,这表明对 webform 的工作方式理解不足,并且在放弃该方法后找到了更好的解决方案。

您应该做的一件事是在 App_Code 中有一个依赖于持久状态的类。这些类应该没有您希望在单个事件触发时保存值的字段或属性。在 ASP.Net 中,容纳您的类的整个线程在您处理的每个事件之间被重置。理解这一点很重要:每次处理事件时,都会创建一个全新的表单类实例,再次运行 page_load 方法,最终运行事件代码,然后销毁表单类(以及整个线程)(或重置以准备好处理来自完全不同用户的请求)。 Web Forms 试图创建一个抽象来使 http 层看起来像一个单一的、持久的页面,但是这个抽象到处都泄露了。

因此,App_Code 类的最佳用途通常是将它们保留给多个页面共享的实用方法,但仍仅依赖于来自单个 http 请求的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2012-10-19
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多