Time Tracker Starter Kit 简介

摘要:了解新的 Time Tracker Starter Kit,它是一个用于 Microsoft Visual Studio 2005 和 Microsoft Visual Web Developer 2005 Express Edition 的可下载项目类型。

*
本页内容
简介 简介
Time Tracker Starter Kit 的初始安装 Time Tracker Starter Kit 的初始安装
创建应用程序角色 创建应用程序角色
创建用户 创建用户
更改注册详细信息 更改注册详细信息
母版页 — MasterPage.master 母版页 — MasterPage.master
创建项目 — Project_Details.aspx 创建项目 — Project_Details.aspx
列出项目 — Project_List.aspx 列出项目 — Project_List.aspx
输入时间 — TimeEntry.aspx 输入时间 — TimeEntry.aspx
查看项目报告 — Report_Project.aspx 查看项目报告 — Report_Project.aspx
查看项目资源详细信息 — Report_Resources.aspx 查看项目资源详细信息 — Report_Resources.aspx
小结 小结

简介

Time Tracker Starter Kit 使您能轻松创建这样一个应用程序,它帮助呈现和管理能跟踪分配给特定项目的时间的系统。Time Tracker Starter Kit 旨在提供一个框架,用于快速组织针对项目和时间管理系统的有价值的 Web 站点。该初学者工具包提供一系列页面,使您能轻松呈现和管理针对多个项目的时间。该初学者工具包的起始页包含一个主页,该主页提供单独用户分配给特定项目的时间日志。该初学者工具包还包含其他页面,用于查看项目、专用于项目的资源,以及基于项目或资源的报告。

通过本概述,您可以看到该框架应用程序提供的大量功能。在首次编译和运行 Time Tracker Starter Kit 并填充某些信息时,您将获得类似于图 1 中显示的内容。


1. 初学者工具包的日志页

通过简单更改提供的代码,Time Tracker Starter Kit 中的每个页面即可为您所用。进行此操作将为您的时间跟踪器 Web 站点启动个性化进程。

Time Tracker Starter Kit 还是一个很好的学习工具。您可以查看生成应用程序每一页的代码,并且将看到它使用了一些 Microsoft ASP.NET 最新版本中的最强的功能。即使您不想针对一个实际 Web 站点使用该初学者工具包,但它仍然是一个用于学习如何使用 ASP.NET 2.0 创建应用程序的优秀资源。

在探究如何使用该应用程序之前,我们先看一下该初学者工具包的安装与启动。

Time Tracker Starter Kit 的初始安装

Time Tracker Starter Kit 可从 MSDN 下载,这是一个 Microsoft Visual Studio 安装程序文件 (TimeTracker.vsi)。双击该文件将启动一个进程来安装该初学者工具包,以便您可以从 Visual Studio 使用该项目。在安装向导的第一个屏幕中(图 2),您将注意到目前 Time Tracker Starter Kit 仅可用于 C#。


2. 安装 Time Tracker Starter Kit

当完成安装过程后,可以打开 Visual Studio 2005,并通过从 Visual Studio 应用程序的菜单中单击 FileNew Web Site 来创建该 Web 站点的新实例。在 New Web Site 对话框中,选择 Visual C# 作为要使用的语言,然后会看到 Time Tracker Starter Kit 成为一个可用的选择。如图 3 所示。


3. 从新的 Web 站点对话框中选择 Time Tracker Starter Kit

选择 Time Tracker Starter Kit 选项之后,为项目命名并单击 OK 按钮继续操作。Visual Studio 随后将创建该应用程序的一个实例,它包含很多文件夹和文件。可以在 Visual Studio 的 Solution Explorer 中查看所有这些创建的项,如图 4 所示。


4. Time Tracker 解决方案

查看图 4,您可以看到该初学者工具包有很多内容。它实际分成 4 个主要部分:

根文件,包含 Default.aspx、Global.asax、web.config 和 web.sitemap 文件。该 ASP.NET 2.0 列表的新添内容是 web.sitemap 文件,它是 Web 站点导航结构基于 XML 的定义。

App_Code 文件夹,包含处理业务逻辑层和数据访问层的类。在 ASP.NET 1.0/1.1 中,需要将 .NET 组件编译为 DLL,然后将其放置在应用程序的 Bin 文件夹中。对于 ASP.NET 2.0,现在可通过将 .NET 组件(实际的 .vb 或 .cs 文件)放入 App_Code 文件夹来执行动态编译。随后,ASP.NET 将编译这些对象。

App_Data 文件夹,包含一个 Microsoft SQL Server Express Edition 文件 (ASPNETDB.mdf)。该文件用于存储应用程序使用的所有成员关系和角色管理信息。该文件夹还包含一个 SQL 脚本,可用来在 Microsoft SQL Server 2005 或 SQL Server 2000 中创建所需的表。

一个名为 TimeTracker 的文件夹,包含本文中描述的应用程序的大部分内容。

创建应用程序角色

在 Visual Studio 中创建 Time Tracker Starter Kit 的实例时,首先应该编译并运行该应用程序。执行此操作将启动一个包含登录窗体的页面。如图 5 所示。


5. 访问应用程序的初始登录窗体

当第一次启动应用程序时,还将创建一组角色,随后会将用户映射到这些角色。如何创建这些角色呢?它们在应用程序的 Global.asax 文件中创建。查看该文件,您将注意到,在 Application_Start 事件中,具有清单 1 中所示的代码。

清单 1. Global.asax 文件的 Application_Start 事件中创建角色

    void Application_Start(Object sender, EventArgs e) {
// Code that runs on application startup
if (Roles.Enabled)
{
if (!Roles.RoleExists("ProjectAdministrator"))
{
Roles.CreateRole("ProjectAdministrator");
}
if (!Roles.RoleExists("ProjectManager"))
{
Roles.CreateRole("ProjectManager");
}
if (!Roles.RoleExists("Consultant"))
{
Roles.CreateRole("Consultant");
}
}
}

通过该代码可以看到,一些 if 语句首先检查是否启用了角色管理系统,如果已启用,则检查 ProjectAdministrator、ProjectManager 和 Consultant 角色是否存在于系统中。这是使用 Roles 类的 RoleExists() 方法完成的。如果检查的结果是 false,则使用 CreateRole() 方法创建角色。

这些角色的区别如下:

项目管理员 — 该角色的人员具有对应用程序的完全访问权。项目管理员可以导航到应用程序提供的每个页。他们能够创建项目、项目类别以及用户。他们可以查看系统中包含的所有资源和项目的报告。

项目经理 — 该角色的人员具有对分配给他或她的项目的完全访问权。项目经理角色和项目管理员角色之间的最大区别在于,项目经理无法列出系统中包含的用户,并且无法看到或处理未分配给他们的项目。

顾问 — 顾问在应用程序中具有最少的特权。顾问只能在他们处理的项目的时间表中输入时间,而没有其他权限。

现在,已经为 Time Tracker Starter Kit 创建了这些角色,可通过关闭浏览器实例来关闭该应用程序。然后,通过从 Visual Studio 应用程序的菜单中单击 Website,然后单击 ASP.NET Configuration,来打开该应用程序的 ASP.NET Website 管理工具。系统随后将提供一个基于 Web 的 GUI,以允许您为应用程序设置特定的配置设置。单击 Security 选项卡之后,将看到确实为应用程序配置了三个角色。如图 6 所示。


6. 确认为 Time Tracker 应用程序创建了三个角色

既然创建了这些角色,接下来我们来看一下如何创建用户。

创建用户

为 Time Tracker Starter Kit 创建用户有若干种方法。每种方法都奏效,但它们之间也有差别,下面将进行解释。这三种方法包括:

导航到 User_Create.aspx 页。该页的链接可以直接在登录窗体下找到,如图 5 所示。

直接通过 ASP.NET Web Site 管理工具创建用户。

从 Time Tracker 应用程序中的 Administration 选项卡创建用户。如果您是一个已登录的用户,则只能到达应用程序的这个位置,但该页允许您创建需要的其他用户。您也可以在此时将特定角色指定给用户。

让我们看一下如何使用 User_Create.aspx 页创建第一个用户。浏览到 Time Tracker 应用程序的任何人都能够进入该登录窗体,并且能够单击该链接来创建用户。这意味着,默认情况该应用程序对所有用户开放。任何人都可以将他或她设置为用户,然后登录该应用程序。

单击 Create new user 链接打开一个页面,该页面允许输入用户的用户名、密码和电子邮件地址。需要注意的是,默认情况下 ASP.NET 2.0 需要一个强密码,该密码至少包括 8 个字符,其中包括大小写字母、数字和特殊符号(例如,!、#、$ 和 %)的组合。

将信息输入窗体之后,单击 OK,然后系统将进行设置以登录到应用程序。但是,在注册过程的末尾单击带有确认消息的 Finish 按钮会自动将用户登录到应用程序。这是因为 CreateUserWizard 服务器控件(这是为注册过程提供窗体的控件)可自动登录注册该站点的用户,方法是使用 LoginCreatedUser 属性,默认情况下该属性设置为 True。登录到该应用程序之后,用户可通过 ContinueDestinationPageUrl 属性定位到另一个页面。如清单 2 所示。

清单 2. 在用户注册后启用页面转发

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server"
OnFinishButtonClick="Wizard_FinishButton_Click"
ContinueDestinationPageUrl="TimeEntry.aspx"
OnCreatedUser="CreateUserWizard1_CreatedUser">
<!-- Content removed for clarity -->
</asp:CreateUserWizard>

通过这段代码可看到 ContinueDestinationPageUrl 属性指向注册过程后用户将定位到的页。

更改注册详细信息

如前所述,默认情况下,任何匿名用户都可以毫无问题地进入应用程序并注册为应用程序管理员。这是一个可通过某些应用程序配置设置轻松更改的行为。查看该解决方案中的文件,会有两个 web.config 文件。一个包含在应用程序的根目录中,另一个包含在 TimeTracker 文件夹中。应用程序根目录中的 web.config 文件提供的设置应用于整个应用程序,而 TimeTracker 文件夹中的 web.config 文件仅用于该文件夹中包含的文件。需要注意的是,即使这两个 web.config 文件中的配置设置相同,TimeTracker 文件夹中的 web.config 文件仍然优于根目录中的 web.config 文件。

查看 TimeTracker 文件夹中的 web.config 文件,您将看到如清单 3 所示的内容。

清单 3. TimeTracker 文件夹的 web.config 文件中的配置设置

<?xml version="1.0"?>
<configuration
xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings>
<!-- Some items removed for clarity -->
<!-- Set the Default Role for New Users
0 = Project Administrator
1 = Project Manager
2 = Consultant
-->
<add key="DefaultRoleForNewUser" value="0"/>
<!-- Define if an anonymousUser is allow to create new users
0 = false
1 = true
-->
<add key="AllowUserCreationForAnonymousUsers" value="1"/>
</appSettings>
</configuration>

有几个不错的设置需要注意。第一个是 DefaultRoleForNewUser 设置。默认情况下,当进入 User_Create.aspx 页来创建用户时,新创建的用户都被赋予项目管理员的角色。这可能不太好。因此,如果已经有一个项目管理员,那么更改其设置将是便捷的。您可以选择为 DefaultRoleForNewUser 设置赋予值 012。这些值的定义在列表的注释中提供。

然后在 User_Create.aspx 页的代码隐藏文件中读取有关指定给用户的角色信息,如清单 4 所示。

清单 4. 提取 DefaultRoleForNewUser

private string GetDefaultRoleForNewUser() {
if (ConfigurationManager.AppSettings["DefaultRoleForNewUser"] == null)
{
throw (new Exception("DefaultRoleForNewUser was not " +
"been defined in the appsettings section of config"));
}
else {
string defaultRole =
ConfigurationManager.AppSettings["DefaultRoleForNewUser"];
if (string.IsNullOrEmpty(defaultRole)) {
throw (new Exception("DefaultRoleForNewUser does not " +
"contain a default value"));
}
else {
if (string.Compare(defaultRole, "3") < 0 &&
string.Compare(defaultRole, "0") >= 0) {
return
(ConfigurationManager.AppSettings["DefaultRoleForNewUser"]);
}
else {
throw (new ArgumentException("DefaultRoleForNewUser " +
"defined in the appsettings has to be between 0 and 2"));
}
}
}
}

然后,在 CreateUserWizard1_CreatedUser 事件中,将使用从 GetDefaultRoleForNewUser() 方法返回的值。

  AddUserToRole(CreateUserWizard1.UserName, GetDefaultRoleForNewUser());

清单 3 的 web.config 文件中需要注意的另一个设置是 AllowUserCreationForAnonymousUsers 设置。该设置指定进入应用程序的匿名用户是否能够注册并登录到该应用程序。默认情况下,这设置为 1(意味着 true)。以这种方式设置后,匿名用户可以在 User_Create.aspx 页的登录窗体页中看到此链接。如果将该设置设为 0(意味着 false),则当用户遇到登录窗体时将不会提供该链接。如图 7 所示。


7. 登录窗体的匿名用户视图

即使匿名用户知道注册窗体(在本例中是 User_Create.aspx)的 URL 位置,并将该页键入浏览器,但仍然不允许他或她针对该站点进行注册,请参见图 8 中的消息。


8. 匿名用户在尝试注册时收到的错误消息

母版页 — MasterPage.master

在处理 Time Tracker Starter Kit 布局的过程中,您会发现大多数页面缺少该应用程序所提供页面布局的一个不错的部分。这是因为 Time Tracker Starter Kit 利用了 ASP.NET 2.0 中一个名为母版页 的全新功能。

母版页提供一种生成模板页的新方式。这意味着,可生成能够应用于指定的每个页的母模板或母版页。正如您将看到的那样,Time Tracker Starter Kit 强制使用母版页。

该初学者工具包的 MasterPage.master 页完全是一个表示模板,可供应用程序中包含的任何内容页使用(后文将对内容页进行简要说明)。

该初学者工具包中使用的导航系统通过母版页来构造和呈现。该导航系统的结构通过一个水平放置的菜单呈现。该导航系统的数据从应用程序的 web.sitemap 文件中检索。

web.sitemap 文件是一个 XML 文件,它允许您定义整个应用程序的导航结构。web.sitemap 文件位于应用程序的根目录,它包含定义单个导航点的一系列<siteMapNode> 链接。单个<siteMapNode> 如清单 5 所示。

清单 5. web.sitemap 文件中的单个元素

<siteMapNode title="Log"
url="~/TimeTracker/TimeEntry.aspx"
description="Log a time entry"
roles="Consultant,ProjectManager,ProjectAdministrator" />

正如您看到的那样,不仅可定义通过读取该 XML 元素来创建的链接的 URL 目标,还可以定义 ToolTip 中使用的文本(通过使用 description 属性),以及允许查看该链接的角色。

通过在 web.sitemap 文件中定义应用程序的页结构,可通过新的 Sitemap 类或新的 SiteMapDataSource 控件与所定义的导航结构进行交互。使用 SiteMapDataSource 控件,可绑定到 web.sitemap 文件中导航结构的内容,方法是使用数据绑定表达式或构建为使用 SiteMapDataSource 控件的服务器控件(例如,TreeViewMenu 服务器控件)。

以 Time Tracker Starter Kit 为例,MasterPage.master 页使用一个菜单控件来获取 SiteMapDataSource 控件提供的信息。清单 6 显示母版页中使用的 SiteMapDataSource 控件。

清单 6. 母版页中的 SiteMapDataSource 控件

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"
ShowStartingNode="false" />

然后,在 SiteMapDataSource 控件标记的正下方,您将发现一个 Menu 服务器控件。Menu 控件通过使用SiteMapDataSource 控件中的 DataSourceID 属性将自身绑定到 SiteMapDataSource 控件。如清单 7 所示。

清单 7. 绑定到 SiteMapDataSource1 控件的 Menu 服务器控件

<asp:Menu ID="MainMenu" runat="server" Orientation="Horizontal"
MaximumDynamicDisplayLevels="2" DataSourceID="SiteMapDataSource1"
DynamicEnableDefaultPopOutImage="False"
StaticEnableDefaultPopOutImage="False">
<StaticMenuStyle CssClass="menu" />
<StaticMenuItemStyle CssClass="menuItem" />
<StaticSelectedStyle CssClass="menuSelectedItem" />
<DynamicMenuStyle CssClass="menuPopup" />
<DynamicMenuItemStyle CssClass="menuPopupItem"
Font-Strikeout="False" />
<DynamicHoverStyle CssClass="menuPopupItem" />
<StaticHoverStyle CssClass="menuItemHover" />
</asp:Menu>

该系统生成的结果如图 9 所示。


9. 工作中的 Menu 服务器控件。

注意,菜单项还会弹出子菜单项 — 均基于 web.sitemap 文件中的信息。

也许对于 ASP.NET 2.0 而言,母版页上最有趣的新服务器控件就是 ContentPlaceHolder 控件。ContentPlaceHolder 控件是一个已定义的区域,它允许使用该特定母版页的任何内容页将内容填入其中。基本上,在构建母版页时,将允许内容页使用该页的指定部分。内容页在该内容区域的边界外无法工作。虽然可通过使用母版页上的多个 ContentPlaceHolder 控件来包括多个内容区域,但本例(我们的 MasterPage.master 页)仅使用了其中一个控件。

<asp:ContentPlaceHolder ID="maincontent" runat="server">
</asp:ContentPlaceHolder>

接下来,我们来看一下使用该母版页的内容页。

创建项目 — Project_Details.aspx

在创建一个包含在项目管理员角色中的用户之后,可单击应用程序中的 Administrator 选项卡,并添加其他将包含在项目经理角色中的用户。此操作将允许稍后将特定项目分配给特定项目经理(如果需要)。

当需要的所有用户都包含在系统中之后,下一步是创建您的第一个项目。为此,从 Time Tracker 应用程序的菜单中单击 Projects,然后单击 Create New Project

这将显示一个如图 10 所示的页。


10. 创建新项目

创建第一个项目需要几个步骤。按以下详细步骤进行:

1.

首先,为项目命名。我将以 Company Intranet 为例。

2.

接下来,指定一个项目经理。他可以是项目管理员或项目经理角色中的任何人。

3.

单击 Calendar 图标,以选择一个日期作为项目的预计完成日期。

4.

输入项目所需的小时数。如果输入一个小数(例如,2.5),则 Time Tracker Starter Kit 会将该小数四舍五入为下一个整数。

5.

输入项目描述。

6.

选择项目需要的所有资源。应用程序成员系统中包含的每个用户(不考虑他们的角色)将显示在该文本框中。要选择多个用户,请按住 CTRL 键,同时用鼠标进行选择。您也可以按住 SHIFT 键进行大范围选择。

7.

单击 Save 按钮。

单击 Save 按钮之后,将创建该项目。下一步是创建项目类别。处理项目的个人使用这些类别来分配时间。图 11 显示将若干个类别输入到系统之后的项目。


11. 将类别分配给新项目

您也可以在该页中编辑或删除类别,方法是选择类别旁边的相应图标按钮。如果您有多个项目,还可以指定一个项目中包含的所有类别,以便它们可以显示在另一个项目中。这通过窗体底部的下拉列表和 Copy 按钮完成(图 11)。

Project_Details.aspx 页是我们看到的第一个内容页。通过查看该页的 @Page 指令,您可以看出它不是标准的 ASP.NET 页,而是一个从母版页获得大量页结构的内容页。

<%@ Page Language="C#" MasterPageFile="~/TimeTracker/MasterPage.master"
CodeFile="Project_Details.aspx.cs" Inherits="Project_Details_aspx"
Title="My Company - Time Tracker - Manage Projects"
Culture="auto" UICulture="auto" %>

通过在 @Page 指令中使用 MasterPageFile 属性,该 ASP.NET 页声明它是一个内容页,并且要使用的模板是我们前面介绍过的 MasterPage.master 页。由于这是一个使用母版页作为模板的内容页,因此您不要包含用作该页框架的任何 HTML 标记(例如,、<html><body><form>标记)。原因是这些项已经包含在 MasterPage.master 页中。

如果您回顾一下母版页,就会想起,该页上只有一个位置允许内容页放置项。这通过使用 ContentPlaceHolder 服务器控件完成。在使用内容页时,您通过使用 Content 服务器控件来关联母版页上 ContentPlaceHolder 控件的该实例。浏览 Project_Details.aspx 页,将看到一个 Content 控件。

<asp:Content ID="Content1"
ContentPlaceHolderID="maincontent" runat="Server">
<!-- Content removed for clarity -->
</asp:Content>

查看 Content 控件,您将注意到关联 ContentPlaceHolder 控件是使用 ContentPlaceHolderID 属性完成的,该属性用作母版页上使用的 ContentPlaceHolder 控件的 ID 属性值。Content 控件中放置的所有内容都将显示在合并页上。

列出项目 — Project_List.aspx

从 Time Tracker 应用程序的菜单中单击 Projects 然后单击 List Projects,可以弹出一个页面,其中列出允许您查看的项目。项目显示在 GridView 服务器控件中,但没有自动将数据库中的所有列绑定到 GridView 中的列 — 通过将 AutoGenerateColumns 属性设置为 False 可关闭该自动功能。相反,该 GridView 控件生成它自己的列,并通过<asp:BoundField><asp:HyperLinkField><asp:CommandField>控件将这些列映射到数据库中的列。该 GridView 控件生成的结果示例如图 12 所示。


12. 项目列表页上显示的项目列表

从图 12 中,您可以看到,还可以编辑或删除 GridView 控件中包含的项目。这些按钮通过清单 8 中所示的<asp:HyperLinkField><asp:CommandField> 控件放置在 GridView 中。

清单 8:将命令按钮放在 GridView 控件中

<asp:HyperLinkField HeaderText="Edit Project" DataNavigateUrlFields="Id"
DataNavigateUrlFormatString="Project_Details.aspx?ProjectId={0}"
Text="Edit..." />
<asp:CommandField ShowDeleteButton="True" HeaderText="Delete"
DeleteImageUrl="images/icon-delete.gif"
ButtonType="Image" />

这里使用了两种不同类型的按钮。第一种是 Edit 按钮。该按钮只是一个指向 Project_Details.aspx 页的超链接,它包含一个带有项目 ID 的查询字符串。项目的实际 ID 通过 DataNavigateUrlFields 属性指定给该 URL。在本例中,它使用的是从基础数据存储中检索的 Id 值。

第二种按钮是 Delete 按钮,它实际上是一个图像。在本例中,我们使用 控件将按钮放在列中。该控件允许按钮是超链接、常规灰色按钮,甚至是图像按钮。在本例中,该按钮实际上是一个图像按钮,并且图像通过指向该图像位置的 DeleteImageUrl 属性指定。但是,如果要使其成为图像,还需要使用 ButtonType 属性,并赋予它一个 Image 值,如清单 8 所示。

GridView 控件实际显示了什么项目?这取决于您所属的角色。呈现哪些项目的逻辑包含在 Project_List.aspx 页的代码隐藏文件 (Project_List.aspx.cs) 中,如清单 9 所示。

清单 9. 决定在 Page_Load 事件中呈现哪些项目

  void Page_Load(object sender, EventArgs e) {
if (!Page.IsPostBack) {
if (Page.User.IsInRole("ProjectAdministrator")) {
ProjectData.SortParameterName = "sortParameter";
ProjectData.SelectMethod = "GetAllProjects";
}
else {
ProjectData.SelectParameters.Add(new Parameter("userName",
TypeCode.String, Page.User.Identity.Name));
ProjectData.SortParameterName = "sortParameter";
ProjectData.SelectMethod = "GetProjectsByManagerUserName";
}
}
}

从这段代码中,您可以看到,系统首先进行检查以确认该请求不是一个回发。然后,检查该用户是否属于 ProjectAdministrator 角色。该角色检查使用 Page.User.IsInRole() 方法完成。如果发现它们属于 ProjectAdministrator 角色,则使用 Project_List.aspx 页上的 ObjectDataSource 服务器控件来检索 GetAllProjects() 方法。否则,使用相同的 ObjectDataSource 控件,但调用 GetProjectsByManagerUserName() 而不是 GetAllProjects()。这些方法位于 Project.cs 类文件的业务逻辑层(App_Code 文件夹中的 BLL 文件夹)中。

输入时间 — TimeEntry.aspx

项目准备好以后,负责该项目的人就可以针对它输入时间了。这在 TimeEntry.aspx 页上完成。当用户登录到 Time Tracker Starter Kit 应用程序之后,他们将直接定位到该页。另一个进入该页的方法是,单击 Time Tracker 站点导航中的 Log 按钮。该页如图 13 所示。


13. TimeEntry.aspx 页上某个项目的登录时间

通过该页,可在该页的窗体中选择一个项目来记录小时数。该项目选择将驱动下拉列表中显示的内容,该列表可显示项目的分类。在项目下拉列表中选择项目也将驱动该页右边部分中显示的条目。在图 13 所示的示例中,已经选择了 Company Intranet 项目,同时还显示了用户 evjen 输入到该项目中的时间。作为项目经理或管理员还意味着,您可以使用分配给某个项目的名称下拉列表,并查看每个用户的时间条目。

由该页的另一个 GridView 控件显示的条目也可通过编辑和删除提供的功能来控制。该 GridView 非常类似于前一页(Project_List.aspx)中生成的 GridView

查看项目报告 — Report_Project.aspx

既然已将时间输入系统并分配给特定项目,您就可以进一步查看该项目的联机报告了。图 14 显示 Company Intranet 项目的简单外观,以及仅由几个条目生成的联机报告。


14. 查看 Company Intranet 项目的联机报告

您可以通过从 Time Tracker Starter Kit 应用程序的菜单中单击 Reports 然后单击 Project Reports,来显示如图 14 所示的报告。随后这将显示一个页面,其中列出用户可以查看的所有项目。从该页选择您有兴趣查看其报告的项目,然后单击页面底部的 Generate Report 按钮。如图 15 所示。


15. 选择要查看的项目报告

通过按住 CTRL 键并使用鼠标或空格键进行选择,可以选择多个报告。

查看项目资源详细信息 — Report_Resources.aspx

正是由于可以查看系统中包含的项目的报告,您也可以根据操作这些项目的个人来查看报告。要进入显示系统资源报告的页面,从应用程序的菜单中单击 Reports,然后单击 Resources Report

然后,将呈现一个具有三个步骤的页:

步骤 1选择您有兴趣查看的项目。如果需要,可选择多个项目。

步骤 2选择您有兴趣查看的资源。如果需要,可选择多个资源。

步骤 3选择您有兴趣查看的日期范围。

选择了这些项之后,您可以按页面底部的 Generate Report 按钮。然后,提供一个报告,如图 16 所示。


16. 查看 Time Tracker Starter Kit 中的资源报告

小结

以下几个原因使得 Time Tracker Starter Kit 既有价值又有趣。首先,它允许您快速而轻松地创建可在当今企业中使用的 Web 站点。其次(也是更重要的原因),与 MSDN 上可用的其他初学者工具包一样,该初学者工具包提供 ASP.NET 2.0 中的一些新功能,以及基础 .NET Framework 2.0 提供的一些新功能。

从泛型到新控件,在该应用程序中可以学到很多东西。需要注意的一些更重要的项是 ASP.NET 2.0 提供的新的成员和角色管理系统。这些新的安全系统允许您轻松管理对应用程序的访问,它们不仅允许以常规方式验证用户,还允许为经过身份验证的用户赋予具有不同访问权限的特定角色。

该初学者工具包并不是按原样使用,相反您需要进行大量自定义。您不必仅限于简单地更改文本;相反,您应该学习如何添加其他角色、特权、新页面以及新功能。

祝您编程愉快!

关于作者

Bill Evjen 是 .NET 技术以及基于社区的 .NET 学习方式的积极倡导者。自 2000 年 .NET 的首批代码发布以来,他一直热衷于 .NET。在同一年,Bill 建立了 St. Louis .NET User Group (http://www.stlnet.org),这是世界上首批 .NET 用户组之一。Bill 还是 International .NET Association (http://www.ineta.org) 的创建者,该联合会在全球有 375,000 多位成员。

Bill 住在美国密苏里州的圣路易斯市,他是关于 ASP.NET 和 XML Web 服务的一位颇受欢迎的作家和演讲者。他已经编写或与他人合著有 Professional C#, 4th EditionProfessional VB 2005, 4th Edition (Wrox)XML Web Services for ASP.NETWeb Services Enhancements: Understanding the WSE for Enterprise ApplicationsVisual Basic .NET BibleASP.NET Professional Secrets(这些均已由 Wiley 出版)。除撰写文章以外,Bill 还在许多会议上发表演讲,包括 DevConnections、VSLive 和 TechEd。

Bill 是 Reuters(国际新闻和金融服务公司)的技术指导,他巡回世界为各大金融机构演说 IT 行业的未来。他毕业于华盛顿 Bellingham 的 Western Washington University,获得俄语学士学位。他不研究计算机的时候,通常在位于芬兰 Toivakka 的家中享受阳光。您可以通过 evjen@yahoo.com 与 Bill 联系。


他的网络日记目前位于 http://www.geekswithblogs.net/evjen

antony
:antony1029@163.com
:http://antony1029.cnblogs.com
原文地址:https://www.cnblogs.com/antony1029/p/368681.html