65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 待办事项列表应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (42投票s)

2001年11月16日

7分钟阅读

viewsIcon

595436

downloadIcon

20484

一个演示 ASP.NET 关键功能的简单应用程序。

概述

To Do List Application in Internet Explorer 6.0

我最近参加了一个由 Wintellect 的人举办的为期两天的精彩 ASP.NET 研讨会。回到我的办公桌后,我决定要用 ASP.NET 写一个应用程序,以巩固我学到的东西。这个简单的应用程序就是结果。然而,这个简单的两页式 Web 应用程序演示了如何使用以下所有 ASP.NET 功能:

  • Web 控件,包括令人敬畏的 DataGrid 控件(我没开玩笑)。
  • DataGrid 模板列。
  • Web 表单数据绑定。
  • 动态控件创建。
  • 视图状态 (View state)。
  • 代码渲染块。
  • 数据绑定表达式。
  • 代码隐藏 (Code behind)。

除了以上内容,还有展示如何进行简单的 ADO.NET 操作、在 Web 窗体中使用 CSS 的代码,甚至我还为了增加点趣味性而加入了一点 JScript!我使用了 C# 作为代码隐藏编程语言,同样是为了学习体验。

安装与设置

我将从示例代码的安装和设置开始。微软曾吹嘘 ASP.NET 应用程序可以“XCOPY”安装。(如果你不知道 XCOPY 是什么,请打开命令提示符输入 HELP XCOPY。)这几乎是真的。你当然可以将一个 .aspx 文件复制到你的 \inetpub\wwwroot 目录,然后在浏览器中打开它,页面就会执行并显示。事实上,我就是这样开始构建这个应用程序的。很快,我发现我需要使用调试器来弄清楚发生了什么,所以我将项目移到了 **Visual Studio .NET** 中以获得更多的控制,并且我再也没有回头。简而言之,以下是你必须做的才能正确安装项目文件,以便你可以使用 VS.NET 构建和调试代码:

  1. 将项目源文件解压缩到你的 \inetpub\wwwroot 目录下的 todo 或其他目录中。
  2. 打开 IIS MMC 管理单元或 Internet 服务管理器。浏览到该目录并选择 **属性**。在 **目录** 选项卡的 **应用程序设置** 部分,点击 **创建**。这会让 IIS 和 VS.NET 满意。
  3. 编辑文件 ToDo.csproj.webinfo 并将 URLPath 设置为正确的 URL,以访问你存放项目的任何位置 1。
  4. web.config 文件中,在 <appSettings> 标签内设置 Microsoft Access 数据库的位置(见下文)。
  5. 你**必须**为本地计算机的 ASPNET 帐户授予对文件 todo.mdb 的修改、执行、读取和写入权限,否则当你尝试更新条目时,会收到“操作必须使用可更新的查询”这个令人困惑的错误消息。欢迎来到安全编程的世界!

完成这些操作后,你应该可以双击 Todo.csproj 在 VS.NET 中打开项目。请注意,我手动创建了一个 Default.htm 文件,它会重定向到 ToDoList.aspx 文件,因为我更喜欢这样做,而不是向 IIS 配置添加默认页面。这样,你就可以访问,例如,https:///todo 来启动应用程序。

源代码概述

我不会在这里尝试进行一个从头到尾的 ASP.NET 教程。我假设如果你对这个示例感兴趣,你愿意自己阅读帮助文件。在这里,我只会重点介绍代码的关键点。

首先,关于数据库。我使用了 **Access 2000** 和 ADO.NET 来为应用程序进行数据访问。这是目前为止最容易上手的方式。我几乎只使用了 OleDbDataAdapter 类和原始 SQL。以下代码片段在使用 ADO.NET 和 ASP.NET 时很常见。

string connStr = ConfigurationSettings.AppSettings["ConnectionString"];
string queryStr = "select * from Items where id=" + idStr;
OleDbDataAdapter adapter = new OleDbDataAdapter(queryStr, connStr);

DataSet ds = new DataSet();
adapter.Fill(ds);

另外,请注意,我将数据库的连接字符串存储在应用程序配置文件中,如安装步骤中所述。在 web.config 文件中,查找以下部分:

<appSettings>
    <add key="ConnectionString" 
       value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
                  C:\Inetpub\wwwroot\todo\ToDo.mdb" />
</appSettings>

主页面是 ToDoList.aspx。本文档顶部显示了它的快照。我对这个页面的目标是显示待办事项列表,允许进行简单的过滤,并允许添加、修改、删除和关闭条目。在代码中,你可以看到将 ASP.NET Web 控件与传统的 HTML 和 CSS 混合使用是完全可以的。事实上,微软的建议是出于性能原因,在需要动态生成内容之前不要使用 Web 控件。

<asp:TemplateColumn ItemStyle-Width="12">
    <ItemTemplate>
    <img 
          src='<%# _priorityUrls[(int)DataBinder.Eval(Container.DataItem,
                             "Priority") - 1] %>'/>
    </ItemTemplate>
</asp:TemplateColumn>

这段代码展示了如何向 DataGrid 添加一个模板列。在这种情况下,我用它来显示待办事项优先级的图标。这里一个关键的点是注意在 src= 标签周围使用单引号(')。虽然未被文档化,但这似乎是使该数据绑定表达式作为属性值起作用的唯一方法。

在页面的 C# 后台代码中,请注意我们如何根据选择的查询动态创建列。例如:

bcOpened = new BoundColumn();
bcOpened.HeaderText = "Opened";
bcOpened.DataField = "Opened";
ToDoDataGrid.Columns.Add(bcOpened);

这段代码动态地向 ToDoDataGrid 添加一个绑定列,在本例中用于显示待办事项首次打开的日期。

在这个文件中另一个值得研究的代码是处理编辑、删除、完成和重新打开命令的方式:

public void ToDoDataGrid_Command(Object sender, DataGridCommandEventArgs e)

数据绑定网格列的工作方式是,当你点击任何编辑/删除/完成/重新打开的锚点时,会运行一小段 JScript 代码。这段 JScript 会导致一个 HTTP POST 请求被发送回 ASP.NET 应用程序。

有一段代码可能会让你抓耳挠腮一段时间,那就是下面这段:

int query = 2;

if (IsPostBack) 
{ 
    query = (int)ViewState["query"]; 
} 
else 
{
    string queryStr = Request.Params["query"]; 
    
    if (queryStr != null) 
        query = Int32.Parse(queryStr);
    
    ViewState["query"] = query;
}

在这个页面上,我正在使用 URL 中的一个参数来指示显示三种网格布局中的哪一种。如果参数丢失,我们就默认显示未完成的待办事项。然而,当用户点击任何绑定列的锚点时,HTTP POST 请求会返回给我们,但请求中缺少查询参数,所以我们不知道我们在查看哪个网格。别担心,ASP.NET 视图状态在这里可以拯救一切。视图状态实际上是在生成的 HTML 中实现为一个隐藏字段,它会随着所有其他 HTTP POST 数据一起发送回来。它基本上包含了你表单中所有 Web 控件的序列化 .NET 对象,最棒的是你可以添加自己的内容。在这个例子中,我们实际上是为 Web 窗体本身使用了视图状态,但我们可以用同样的方式将值附加到网格的视图状态上。

ToDoEdit.aspx 中的代码包含一小段 JScript,用于将焦点设置到表单上的控件。你可能会认为这是 ASP.NET 框架的一部分,但似乎并非如此。

<script for="window" event="onload">
window.document.forms["EditItemForm"].children["DescriptionTextBox"].focus();
</script>

另外请注意,OnSubmit 方法可以通过按 Enter 键或点击锚点来调用。当通过 Enter 键提交时,它实际上是通过页面回发 (post back) 进来的。当点击锚点时,它通过 SaveButton_Click 方法返回。

结论

我不得不说,ASP.NET 让构建外观精美、功能强大且有用的 Web 应用程序变得非常容易。真正的障碍在于学习 .NET Framework 类。有成千上万的类可以帮助你更快地编写应用程序。问题是,当你开始时,你可能不知道某个类是否存在,或者如何正确使用它。希望这个示例能通过演示一些关键的 ASP.NET 类的用法,帮助你更快地开始你的 ASP.NET 开发。我认为你最终会同意,ASP.NET 是微软 .NET 计划的**杀手级特性**。

© . All rights reserved.