Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET中几个页面之间共享常用函数的方法_C#_Asp.net_Architecture - Fatal编程技术网

C# ASP.NET中几个页面之间共享常用函数的方法

C# ASP.NET中几个页面之间共享常用函数的方法,c#,asp.net,architecture,C#,Asp.net,Architecture,这可能是一个很蹩脚的问题,我缺乏关于ASP.Net的知识。在这种情况下,链接到一篇解释的文章将是非常受欢迎的 我在ASP.NET网站上工作,使用C#as代码隐藏。我目前的项目涉及开发几个功能非常相似的页面,许多功能都是相同的。比如说 private void PermissionCheck() { if (null == Session["UserID"] || null == Session["ProjectID"] || null == Session

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

我在ASP.NET网站上工作,使用C#as代码隐藏。我目前的项目涉及开发几个功能非常相似的页面,许多功能都是相同的。比如说

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");
}
我想将其移动到
附件
类中,但为了获得应用程序的物理路径,我需要将请求对象传递到该方法中,这不是很好,因为它将
附件
类与
页面.请求
对象耦合在一起

是否有任何方法可以将这些函数移动到其他地方,而无需通过
页面。请求周围的
对象


p、 这个应用程序非常庞大,没有改变整个体系结构的余地。

对于您的权限,您可以创建一个基本页面类:

class BasePage : Page
{ 
   ...
   protected override OnInit() {
     // do check here
   }
}
现在您可以像这样实现页面
类MyOtherPage:BasePage{…}
每次加载MyOtherPage时,都会执行OnInit

您可以在此处看到完整的页面生命周期:

您的其他问题:考虑实现全局可用静态工具类

更新

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

更新2

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

HttpContext.Current.Request

如果页面后面有类似的功能,可以使用

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


看看这篇关于

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

HttpContext

类将非常方便,因为您可以通过该类通过静态成员访问许多ASP.Net对象

是的,我考虑过遗产问题。但是应用程序有大约50个页面,每个页面都有不同的权限/其他功能集。我只幸运地拥有这两个具有相同权限和功能的页面。我会想一想怎么把它放进去。谢谢至于静态工具类,有一些,但是我如何避免将代码>请求/代码>对象传递到该类?@ Trimax也许你应该考虑在你的应用程序中实现一个角色系统。有关请求对象的问题,请再次查看我的更新答案。角色系统在下一年要做的事情列表中。谢谢你的更新你仍然可以把它放在附件类;附件类方法可以是:私有静态字符串GetAttachmentTempPath(string appPhysicalPath)-然后您可以从项目中的任何位置调用它-字符串attachmentTempPath=GetAttachmentTempPath(Request.PhysicalApplicationPath);这样,用于处理附件的代码都存在于Attachment类中,但您可以根据需要将实际数据传递给它(甚至可以在初始化该类时这样做)。传入对象实际上比依赖HttpContext耦合性更低,顺便说一句,如果你使用的是网站项目,微软的官方建议是:@sq33G这是一个非常有趣的想法。。有点搞定了。我再想想哈!HttpContext——这就是我所缺少的。谢谢!