在ASP.NET的几个页面之间共享公共函数的方法

本文关键字:共享 之间 方法 函数 几个 NET ASP | 更新日期: 2023-09-27 18:18:31

这可能是一个非常蹩脚的问题,我缺乏关于ASP.Net的知识。在这种情况下,非常欢迎提供一篇文章的链接来解释。

我在ASP网站工作。. NET使用c#作为后台代码。我目前的项目涉及开发几个页面非常相似的功能和许多功能是相同的。例如

private void PermissionCheck()
{
    if (null == Session["UserID"] ||
        null == Session["ProjectID"] ||
        null == Session["AssetID"] ||
        null == Session["ProjectName"])
    {
        Response.Redirect("~/Login.aspx");
    }
 }

在两页上是一样的。其他一些事情也是一样的。我想把它放到公共基类中。但是还有一些函数根本不属于页面:

private string GetAttachmentTempPath()
{
    return Request.PhysicalApplicationPath + WebConfigurationManager.AppSettings.Get("AttachmentsTempFolder");
}

我想将其移动到Attachment类,但要获得应用程序的物理路径,我需要将请求对象传递到该方法中,这不是很好,因为它将Attachment类与Page.Request对象耦合。

是否有办法将这些函数移动到其他地方而不需要传递Page.Request对象??

注。应用程序是巨大的,没有改变整个体系结构的余地。

在ASP.NET的几个页面之间共享公共函数的方法

你可以创建一个基页类:

class BasePage : Page
{ 
   ...
   protected override OnInit() {
     // do check here
   }
}

现在你可以像这样实现你的页面class MyOtherPage : BasePage { ... }OnInit会在每次MyOtherPage被加载时执行。

你可以在这里看到一个完整的页面生命周期:Link

对于其他问题:考虑实现一个全局可用的静态工具类

制作web之类的东西的好方法。更容易访问的配置是Singleton。在asp.net中,单例对象只创建一次,直到asp工作进程停止为止。这些值在整个asp.net应用程序中共享。这对于在全局上下文中存储数据也很有用,因为当用户发出页面请求(例如版本号或类似的东西)时,您不想从数据库或文件中取出这些数据

更新2

要访问请求而不将其传递给每个函数,使用以下命令:

HttpContext.Current.Request

基页对于页面级别的可重用代码是一个很好的选择。除此之外,对于配置值之类的东西,最好为那些基于操作类型的方法提供专门的实用程序类。如果您需要避免将Page对象传递到这些类型的实用程序方法中,

HttpContext

类会很方便,因为您可以访问许多ASP。Net对象通过静态成员通过这个类。httpcontext @ MSDN

如果您在页面后面有类似的功能,您可以使用ASP。. NET WEb用户控制。

您可以在usercontrol中创建函数,并在必要时在页面中使用该控件。

看一下这篇关于Asp中的Web用户控制的文章。净