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

掌握 .NET 代码模型

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2011 年 5 月 10 日

CPOL

5分钟阅读

viewsIcon

17545

本文旨在向初学者简要介绍理解 .NET 代码模型的重要性。本文将客观地探讨学习 .NET 代码模型的方法,并参考 Iron Speed Designer 和 Visual Studio 作为客观视角的组成部分。

引言

掌握 .NET 代码模型是迈向 Web 开发极乐世界的必经之路。要完整理解 .NET 在 Web 世界中的工作原理,可能需要一段漫长的时间。在这篇文章中,我将向您展示如何缩短学习曲线,深入了解 Web 开发的关键知识,并提供重要的学习资源。

image001.png

首先,让我们讨论一下我们的工作环境。无论您是使用像 Iron Speed Designer 这样的代码生成工具,还是从头开始使用 Visual Studio 来构建 Web 应用程序,您首先需要掌握“无状态页面”的概念。这很简单,意味着当您在浏览器中显示一个页面(任何页面)时,除了使用 Javascript(以及通过它扩展的 AJAX)之外,该页面本身只包含文本和图形。感到困惑吗?我一开始也很困惑。

Windows 或桌面程序的运行方式不同。几乎总有后台进程在运行,用于支持该程序的主要功能,无论是操作系统、文字处理器还是电子表格程序。

Web 应用程序或网站中的页面(始终在浏览器中查看)是“无状态”的,因为很久以前互联网速度非常慢。因此,您无法一次传输大量信息,而不会出现非常明显的延迟——以至于应用程序慢到无法使用!因此,开发人员会分小块发送文本和图形。如果对页面进行了更改,则必须将整个页面从服务器重新发送到客户端,并且在此过程中任何更改都可能丢失。

自互联网早期 诞生以来,开发人员就必须处理这个基本事实。尽管互联网速度自那时以来已显著提高,但我们仍需处理相同的技术基础。

浏览器制造商通过引入称为“ViewState”的东西来克服这一限制。ViewState 是一种在客户端计算机本地存储某些信息的方式,可以存储在浏览器内存本身中,也可以通过硬盘上的缓存文件存储。

这就引出了下一个逻辑问题:“我如何区分页面是第一次加载还是第二次或之后重新加载?”这个问题可以通过使用一个称为“Postback”的特殊标志来解决。我们想知道这一点,因为我们不想在不必要时清除页面上的信息!

您还在跟着我吗?很好。让我们继续学习更好的内容。有一种架构称为 .NET 页面生命周期。这是一个框架,它标识了每个 .NET 页面从创建到销毁所经历的各个阶段。从高层次来看,这些阶段包括:

阶段 描述
页面请求 页面请求发生在页面生命周期开始之前。当用户请求页面时,ASP.NET 会确定是否需要解析和编译该页面(从而开始页面的生命周期),或者是否可以在不运行页面的情况下发送页面的缓存版本作为响应。
Start 在启动阶段,会设置页面属性,例如 RequestResponse。在此阶段,页面还会确定请求是回发还是新请求,并设置 IsPostBack 属性。页面还会设置 UICulture 属性。
初始化 在页面初始化期间,页面上的控件可用,并且会设置每个控件的 UniqueID 属性。如果适用,还会将主页和主题应用于页面。如果当前请求是回发,则尚未加载回发数据,控件属性值尚未恢复到视图状态中的值。
Load (加载) 在加载期间,如果当前请求是回发,则会使用从视图状态和控件状态恢复的信息加载控件属性。
回发事件处理 如果请求是回发,则会调用控件事件处理程序。之后,所有验证控件的 Validate 方法会被调用,这将设置各个验证控件和页面的 IsValid 属性。
渲染 在呈现之前,会为页面和所有控件保存视图状态。在呈现阶段,页面会调用每个控件的 Render 方法,提供一个文本写入器,将控件的输出写入页面 Response 属性的 OutputStream 对象。
Unload Unload 事件在页面完全呈现、发送到客户端并准备被丢弃之后引发。此时,页面属性(如 ResponseRequest)将被卸载并执行清理操作。

来源:http://msdn.microsoft.com/en-us/library/ms178472.aspx#general_page_lifecycle_stages

需要了解的重要事件包括

表 1

image002.png

来源:http://msdn.microsoft.com/en-us/library/ms178472.aspx#general_page_lifecycle_stages

这些事件都很重要!例如,在 **Init** 事件期间,我可能需要初始化页面上的某些变量或控件。`LoadData` 事件是向页面控件加载数据的绝佳位置。当然,**PreRender** 事件是基于条件逻辑来隐藏或显示页面上控件的绝佳位置。

结论

现在我们对 .NET 代码模型的基础有了更多的了解。还有很多东西需要学习,但您已经掌握了基本知识。Iron Speed Designer 等现代代码生成工具可以帮助您消除痛苦。例如,Iron Speed 会为我们生成所有代码,只留下实现自定义业务逻辑(如果需要)的工作。

我经常使用 Iron Speed Designer 来生成应用程序(从我的预设计数据库),然后如果需要编写特殊代码,则使用 Visual Studio 2010。

扎实掌握 .Net 页面生命周期将大大提高您在处理 .NET 时的理解能力(和耐心)。

学习 .NET 页面生命周期以及由此衍生的代码模型的最佳方法是使用免费工具。您可以免费下载 Iron Speed Designer 和 Visual Studio 2010 Express Edition。在 Iron Speed 中生成 ASP.NET 示例应用程序,然后在 Visual Studio 中查看生成的页面。您将对结果感到满意。

© . All rights reserved.