控件和页面中的相同属性

时间:2011-08-17 12:50:43

标签: c# asp.net inheritance user-controls properties

我为我的页面创建了一个基类,我可以在其中获取/设置某些会话属性。

public class MyBasePage : System.Web.UI.Page
{
    public MyUser SessionUser
    {
        get
        {
            return (MyUser) Session["User"];
        }
        set
        {
            Session["User"] = value;
        }
    }
}

(我知道ASP.NET Membership提供了一个User类,但由于遗留原因,我不能使用Membership。)

我现在可以轻松地从每个页面访问这些属性,但我也需要在某些控件中使用它们。我现在看到两个选择:

  1. 从控件中获取页面并将其转换为MyBasePage。然后访问该物业。
  2. 复制BaseControl类中的代码并从中继承控件。 (由于代码重复,显然存在缺陷)
  3. 使用静态类并将属性放在那里。 (使用HttpContext.Current.Session)
  4. 别的什么?
  5. 最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

我肯定会选择3并使用静态类。这样可以节省您的页面和控件,使其不必继承简单的方法/属性调用。

您在选项2中的评论是您不应该首先使用继承方法的原因。选项1,只是采取选项2并使其更难管理。

答案 1 :(得分:0)

如果你在项目中使用了很多会话变量,我建议你有一个SessionManager类,你可以在其中设置getter和setter属性。因此,根据您的示例,只要用户登录,您就可以设置会话值。现在,您可以从项目的任何位置访问此会话值。