1.功能
LoginView 控件根据用户是否经过身份验证以及他(或她)属于哪个网站角色(如果用户经过身份验证),为不同的用户显示不同的网站内容模板(或者说“视图”)。
存储在 AnonymousTemplate属性中的模板向所有未在网站中登录的访问者显示。用户登录后,网站或者显示与 RoleGroups属性中该用户的某个角色相关联的模板,或者显示 LoggedInTemplate属性中指定的默认模板。
为LoginView类的以下三个模板属性中的任何一个属性分配了模板后,LoginView 控件将管理不同模板之间的切换:
● AnonymousTemplate 指定向未登录到网站的用户显示的模板。登录用户永远看不到此模板。
● LoggedInTemplate 指定向登录到网站,但不属于任何具有已定义模板的角色组的用户显示的默认模板。
● RoleGroups 指定向已登录且是具有已定义角色组模板的角色的成员显示的模板。内容模板与 RoleGroup实例中的特定角色集相关联。
描述 LoginView 控件在使用各种模板组合时的行为,如表1所示。
表1 LoginView 控件在使用各种模板组合时的行为
LoggedIn Template 属性 | Anonymous Template 属性 | RoleGroups 属性 | LoginView 行为 |
未设置 | 未设置 | 未设置 | 不显示任何内容 |
已设置 | 未设置 | 未设置 | 仅当用户登录后才显示内容 |
未设置 | 已设置 | 未设置 | 仅当用户尚未登录时显示内容 |
未设置 | 未设置 | 已设置 | 显示 RoleGroups 集合中第一个与用户某个角色相匹配的模板。如果未找到匹配模板,则不显示内容 |
已设置 | 已设置 | 未设置 | 如果用户已登录,则显示 LoggedInTemplate 属性中指定的模板。如果用户尚未登录,则显示 AnonymousTemplate 属性中指定的模板 |
已设置 | 已设置 | 已设置 | 如果用户已登录,则显示 RoleGroups 集合中第一个与用户某个角色相匹配的模板。如果未找到匹配模板,则显示 LoggedInTemplate 属性中指定的模板。如果用户尚未登录,则显示 AnonymousTemplate 属性中指定的模板 |
已设置 | 未设置 | 已设置 | 如果用户已登录,则显示 RoleGroups 集合中第一个与用户某个角色相匹配的模板。如果未找到匹配模板,则显示 LoggedInTemplate 属性中指定的模板。如果用户尚未登录,则不显示任何内容 |
未设置 | 已设置 | 已设置 | 如果用户已登录,则显示 RoleGroups 集合中第一个与用户某个角色相匹配的模板。如果未找到匹配模板,则不显示任何内容。如果用户尚未登录,则显示 AnonymousTemplate 属性中指定的模板 |
2.属性
LoginView 控件常用属性及说明,如表2所示。
表2 LoginView 控件常用属性及说明
属性 | 说明 |
AnonymousTemplate | 获取或设置向未登录到网站的用户显示的模板 |
EnableTheming | 获取或设置一个值,该值指示是否能对 LoginView 控件应用主题 |
LoggedInTemplate | 获取或设置向已登录网站但不属于 RoleGroups属性中指定的任何角色组的网站用户显示的模板 |
NamingContainer | 获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同 Control.ID 属性值的服务器控件 |
TemplateControl | 获取或设置对包含该控件的模板的引用 |
TemplateSourceDirectory | 获取包含当前服务器控件的 Page 或 UserControl 的虚拟目录 |
RoleGroups | 获取将内容模板与特定角色相关联的角色组集合 |
下面对比较重要的属性进行详细介绍。
(1)AnonymousTemplate属性
此属性获取或设置向未登录到网站的用户显示的模板
语法:
public virtual ITemplate AnonymousTemplate { get; set; }
属性值:
要显示的ITemplate。
说明:AnonymousTemplate 模板永远不会向通过身份验证的用户显示。如果AnonymousTemplate 属性为空,则不向未登录用户显示任何内容。
(2)LoggedInTemplate属性
此属性获取或设置向已登录网站,但不属于 oleGroups属性中指定的任何角色组的网站用户显示的模板。
语法:
public virtual ITemplate LoggedInTemplate { get; set; }
属性值:
要显示的ITemplate。
说明:在以下两个条件均得到满足时,将向网站用户显示LoggedInTemplate 属性:
1.Page User 属性的Name 属性不为空引用;用户不属于 RoleGroups 属性中定义的角色组。
2.LoggedInTemplate指定向通过身份验证的网站用户显示的默认模板。如果尚未配置角色管理,则LoggedInTemplate 是惟一可为通过身份验证的用户使用的模板。
(3)RoleGroups属性
此属性获取将内容模板与特定角色相关联的角色组集合。
语法:
public virtual RoleGroupCollection RoleGroups { get; }
属性值:
一个包含已定义角色组模板的 RoleGroupCollection对象。
本例使用LoginView 控件实现登录用户和匿名用户显示不同的内容。示例运行,如果用户没有登录,则给出提示。单击链接进入登录页面,输入用户名“soAsp.net”,密码“111”登录网站。
LoginName控件与Login控件设计码如下。
<asp:LoginView ID="LoginView1" Runat="server">
<LoggedInTemplate>
<asp:LoginName ID="LoginName1" Runat="server"
FormatString =" {0}:欢迎登录本站" Width="218px" />
<br />
<asp:LoginStatus ID="LoginStatus1" runat="server" Width="38px" />
</LoggedInTemplate>
<AnonymousTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" Height="35px" NavigateUrl="~/Login.aspx"
Width="254px">请您登录本网站,登录</asp:HyperLink>
</AnonymousTemplate>
</asp:LoginView>
3.事件
LoginView控件常用事件及说明,如表3所示。
表3 LoginView控件常用事件及说明
事件 | 说明 |
Init | 当服务器控件初始化时发生;初始化是控件生存期的第一步 |
Load | 当服务器控件加载到Page对象中时发生 |
ViewChanged | 在视图更改后发生 |
ViewChanging | 在视图更改前发生 |
下面对比较重要的事件进行详细介绍。
(1) ViewChanged事件
此事件在视图更改后发生。
语法:
public event EventHandler ViewChanged
说明:当LoginView控件在视图之间进行切换时,它将移除来自先前模板的控件,并使用新模板创建新的子控件。ViewChanged 事件在新的子控件创建之后引发。使用 ViewChanged 事件执行在新视图中初始化控件所必需的任何处理(如数据绑定)。
(2)ViewChanging
此事件在视图更改前发生。
语法:
public event EventHandler ViewChanging
4.典型实例
本例实现登录控件的综合应用,使用LoginStatus控件判断成员资格用户是否经过了身份验证。运行实例“Default.aspx”页,此时成员资格用户还没有通过验证,所以会给出提示“你还没有登录本站,点击此处登录网站!”的链接,点击此链接进入登录页面。主要代码如下。
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Login.aspx" Width="359px">你还没有登录本站,点击此处登录网站!</asp:HyperLink>
</AnonymousTemplate>
</asp:LoginView>