我有一些页面的内容与登录用户和未登录用户都相关。例如,包含联系信息,隐私政策等的页面。所有页面都有您的典型导航菜单,但登录的用户通常会看到与未登录用户不同的导航菜单栏。
在ASP.net中执行此操作的最佳方法是什么?
到目前为止,可能的解决方案包括以下内容:
我不是#1的粉丝,因为第一次访问该网站的用户可能有某种类型的弹出窗口拦截器或禁用了javascript。
我知道#2可以通过让页面使用从MasterPage继承的某种类型的基类来实现。但是,我读过这可能不是最好的设计,因为现在其中一个页面可以访问非必要的变量。
第三种方法听起来很合理,但之后会有两个单独的ASPX文件。
有没有正确的方法呢?还是我还没想到的另一种方法呢?
修改
为了澄清,登录用户需要在未登录用户的主页中设置某些变量。原因是有一个用户控件显示一个特殊的导航菜单,根据这些变量突出显示某些项目。
例如,用户控件需要一个字符串来确定要突出显示的项目。包含个人资料信息的页面将提供“个人资料”作为参数,以突出显示菜单上的“个人资料”项目。
用户控件中的菜单是根据数据库中的数据动态生成的。菜单项按类别分组,并显示相应的标题,该标题也从DB中提取。
答案 0 :(得分:1)
可编程地更改母版页很容易;只需在pre init上提供正确的URL,设置
protected override void OnPreInit(..)
{
if (this.User != null) {
if (this.User.Identity.IsAuthenticated)
this.MasterPageFile = "~/loggedin.master";
else
this.MasterPageFile = "~/notloggedin.master";
}
}
不需要基类。
用户控制方法也可以,但更改母版页文件非常容易。
编辑:如果您要设置或从主设备获取属性,您可以让代码隐藏文件实现该接口,并检查this.Master引用是否属于该接口类型。
HTH。