繁体   English   中英

在多个页面中重复使用相同的方法

[英]Re-using the same method across multiple pages

我有办法

public void CheckLogin()
{
    if ((Session["UserName"] == "") || (Session["UserName"] == null))
    {
        Response.Redirect("Account/Login.aspx");
    }
}

我不想在每个页面上重写它。 我该如何定义一次并在其他页面中调用此函数?

您通常将其放在实用程序类中。 将该功能标记为静态。 将实用程序类放在App_Code文件夹中(如果没有该文件夹,则将该文件夹放在网站的根目录中)。 确保您的类具有适当的using语句。

using System;
using System.Web;

public class AuthenticationUtilities
    {
    public static void CheckLogin()
        {
        if (HttpContext.Current.Session["UserName"]==null || HttpContext.Current.Session["UserName"]=="")
            {
            HttpContext.Current.Response.Redirect("Account/Login.aspx");
            }
        }
    }

然后像这样从页面调用它...

AuthenticationUtilities.CheckLogin();

顺便说一下,您正在重新发明轮子。 您应该使用诸如身份之类的技术,而不是自己动手做。 我只是提供此答案,以防您需要在另一点上创建各个页面共有的功能。

使用继承为网页提供通用功能。

创建一个执行常规任务的页面,然后从该页面派生所有其他页面。

public class MyPage : MyBasePage

使用这种方法,无需显式调用任何东西。 它将全部在基类中处理,然后可以根据需要进行扩展。 您需要记住的是更改类声明,使其从您的基类继承。

另一种方法可能是将其放在公共母版页中。 但是我不太喜欢这种方法。

如果您正在执行此类授权检查,则可能要处理授权事件。 这很常见,以至于有一种内置方法:

来自基于用户的授权 ...

步骤1:在Web.config中定义URL授权规则

步骤2:修正未经授权,经过身份验证的用户的工作流程

创建带有静态类的类文件可能称为“ SessionCheck.cs”

并以静态形式写入此函数

public Static void CheckLogin()

    {

        if ((Session["UserName"] == "") || (Session["UserName"] == null))
        {

            Response.Redirect("Account/Login.aspx");

        }

    }

那么您可以从任何页面访问它

SessionCheck.CheckLogin();

将其放在会话助手类中。

public class SessionHelper
{
    public static void CheckLogin()
    {
        if ((Session["UserName"] == "") || (Session["UserName"] == null))
        {
            Response.Redirect("Account/Login.aspx");
        }
    }
}

然后您这样称呼它。

SessionHelper.CheckLogin();

创建一个从Page扩展的类文件,

public class Navegable: Page

因此在init函数中将您的代码

void NavigablePage_PreInit(object sender, EventArgs e)
        {
if ((Session["UserName"] == "") || (Session["UserName"] == null))
        {
            Response.Redirect("Account/Login.aspx");
        }
}

因此,网络表单从可导航性扩展。

MyPage : Navegable

就是这样,您所有从navegable扩展的网络表单都将运行验证

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM