1.8 使用LoginView控件
根据不同用户的认证状态,LoginView控件可以用于显示不同的内容。例如,代码清单1-39中的页面将分别为认证用户和匿名用户显示不同的内容(见图1-16)。

图1-16 通过LoginView控件为认证用户显示指定内容
代码清单1-39中的LoginView控件包含了两个模板:AnonymousTemplate模板和LoggedInTemplate模板,在同一时刻只能显示其中一个。
代码清单1-39 ShowLoginView.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Show LoginView</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginStatus
id="LoginStatus"
Runat="server" />
<hr />
<asp:LoginView
id="LoginView1"
Runat="server">
<AnonymousTemplate>
This content is displayed to anonymous users.
</AnonymousTemplate>
<LoggedInTemplate>
This content is displayed to authenticated users.
</LoggedInTemplate>
</asp:LoginView>
</div>
</form>
</body>
</html>
该页面中还包含了一个LoginStatus控件,使用它可以快速地登录和登出应用程序。
注解 LoginView控件在使用Windows认证时也能像使用Forms认证一样工作。
在LoginView控件中使用角色
对属于不同角色的不同用户,也可以通过使用LoginView控件来为其分别显示不同的内容。代码清单1-40中的页面包含了一个LoginView控件,该控件包含两个RoleGroup控件。第一个RoleGroup控件含有为管理员组(Administrator)成员显示的内容,第二个则包含为工作人员组(Worker)成员显示的内容。
代码清单1-40 LoginViewRoles.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
MembershipCreateStatus status;
// Create Bill
Membership.CreateUser("Bill","secret_","bill@somewhere.com","dog","rover",true,out status);
// Create Ted
Membership.CreateUser("Ted", "secret_", "ted@somewhere.com", "dog", "rover", true,out status);
// Create Fred
Membership.CreateUser("Fred", "secret_", "fred@somewhere.com", "dog", "rover", true, out status);
// Create Administrator Role
if (!Roles.RoleExists("Administrator"))
{
Roles.CreateRole("Administrator");
Roles.AddUserToRole("Bill", "Administrator");
}
// Create Manager Role
if (!Roles.RoleExists("Manager"))
{
Roles.CreateRole("Manager");
Roles.AddUserToRole("Bill", "Manager");
Roles.AddUserToRole("Ted", "Manager");
}
// Create Worker Role
if (!Roles.RoleExists("Worker"))
{
Roles.CreateRole("Worker");
Roles.AddUserToRole("Fred", "Worker");
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>LoginView Roles</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginStatus
id="LoginStatus"
Runat="server" />
<hr />
<asp:LoginView
id="LoginView1"
Runat="server">
<RoleGroups>
<asp:RoleGroup Roles="Administrator">
<ContentTemplate>
This content is displayed to Administrators.
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="Manager,Worker">
<ContentTemplate>
This content is displayed to Managers
and Workers.
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
</div>
</form>
</body>
</html>
代码清单1-40中的事件处理函数Page_Load()创建了名为Bill、Ted和Fred的三个用户。Bill加入了管理员和经理组(Manager),Ted加入了经理组,而Fred加入了工作人员组。
在同一时刻,LoginView控件只能显示一个RoleGroup所对应的内容。如果同一个用户属于多个RoleGroup,那么将显示第一个匹配的RoleGroup所对应的内容,而其他RoleGroup对应的内容将被忽略。
代码清单1-41 Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authentication mode="Forms" />
<roleManager enabled="true" />
</system.web>
</configuration>






