ASP.NET基础与入门:WebForm,事件驱动编程,Page类

注:因为这个暑假做了一个ASP.NET的项目(WebForms模式),暑假期间太忙没有来得及整理,现在统一梳理下知识(有些我认为可以跟HTML共通的就没记)

推荐几个学习ASP.NET的网站:

W3School
菜鸟教程

书的话。。因为当时项目太紧张。直接动手实战,有不会的直接在上面两个网站查询的。

当时我入门看的书有:

ASP.NET 1.1入门经典-Visual C#.NET 2003编程篇
ASP.NET 3.5 从入门到精通(C#2008版)<—-强推

—–那么,开始ASP.NET学习之旅吧~—–

ASP.NET

ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本(在服务器上运行的语言)创建网页和网站的开发框架

ASP.NET 支持三种不同的开发模式:

  1. Web Pages(Web 页面)

  2. MVC(Model View Controller 模型-视图-控制器)

  3. Web Forms(Web 窗体)

这里写图片描述

ASP.NET简介

ASP.NET 是新一代的 ASP。它无法兼容经典 ASP,但 ASP.NET 可以引用 ASP。
ASP.NET 页面需要编译,因此比经典 ASP 更快。
ASP.NET 拥有更好的语言支持,大量用户控件,基于 XML 的组件,以及对用户认证的整合。
ASP.NET 页面的扩展名是 .aspx,通常由 VB (Visual Basic) 或 C# (C sharp) 编写。
ASP.NET 中的用户控件可以通过不同的语言进行编写,包括 C++ 和 Java。

ASP.NET 文件

ASP.NET 文件类似 HTML 文件
ASP.NET 文件可以包含 HTML、XML 以及脚本
ASP.NET 文件中的脚本在服务器上执行
ASP.NET 文件的文件后缀是 “.aspx”

ASP.NET文件扩展名

  • ASP 文件的文件扩展名是 .asp
  • ASP.NET 文件的文件扩展名是 .aspx
  • ASP.NET 文件使用 C# 语法的文件扩展名是 .cshtml
  • ASP.NET 文件使用 Razor VB 语法的文件扩展名是 .vbhtml

ASP.NET 如何工作

  • 当浏览器请求 HTML 文件时,服务器会返回该文件
  • 当浏览器请求 ASP.NET 文件时,IIS 会把该请求传递给服务器上的 ASP.NET 引擎
  • ASP.NET 引擎会逐行地读取该文件,并执行文件中的脚本
  • 最后,ASP.NET 文件会以纯 HTML 的形式返回浏览器

根本上讲,ASP.NET 页面与 HTML 完全相同
HTML 页面的扩展名是 .htm 或 .html。假如浏览器从服务器请求某张 HTML 页面,服务器不进行任何修改,就会把该页面发往浏览器。

ASP.NET 页面的扩展名是 .aspx。如果浏览器请求某张 ASP.NET 页面,那么在把结果发回浏览器之前服务器首先会处理页面中的可执行代码

ASP.NET中的<form>标记

ASP.NET有一组窗体控件,它们的使用与HTML窗体控件相同,两者的主要区别是服务器控件是在请求时在服务器上动态形成的,然后再发送出去。

ASP.NET版本只需要几个字符的编码,如下所示:

<form ID="MyForm" runant="server">
...ASP.NET form...
</form>

这个<form>标记只使用了一个属性,即runant=”server”。该属性告知Web服务器应该处理窗体本身,而不是只将它传送到浏览器。所有ASP.NET窗体都用POST方法传送。

<form>标记允许在服务器上处理窗体控件(例如复选框和下拉列表)。ASP.NET对这些控件进行了自定义。

使用ASP.NET窗体控件有几个优点:

  • .NET会自动创建和维护状态,允许用户了解请求窗体的人是否就是请求另一个页面的人
  • ASP.NET提供了一些非常复杂的控件,包括日历控件和栅格控件,来显示数据
  • 控件的内容可以从数据库或商务逻辑中生成
  • 用户输入到控件中的信息可以进行有效性检查,避免输入错误

WebForm简介

传统的 ASP.NET 事件驱动开发模型
添加了服务器控件服务器事件以及服务器代码的网页。

WebForm控件

WebForm中的控件,其实就是服务器控件。带有runat=”server” 属性,必须在服务器进行处理(如果不进行处理,则会报错)

服务器控件是可被服务器理解的标签。

有三种类型的服务器控件:

  • HTML 服务器控件 - 传统的 HTML 标签
  • Web 服务器控件 - 新的 ASP.NET 标签
  • Validation 服务器控件 - 用于输入验证

ASP.NET - HTML 服务器控件

HTML 服务器控件是服务器可理解的 HTML 标签

ASP.NET 中的 HTML 元素是作为文本来进行处理的。要想使这些元素可编程,就需要向这些 HTML 元素添加 runat=”server” 属性。该属性指示,此元素是一个服务器控件。同时要添加 id 属性来标识该服务器控件。该 id 引用可用于操作运行时的服务器控件。

注释:所有 HTML 服务器控件必须位于带有 runat=”server” 属性的 标签内。runat=”server” 属性指示该表单应在服务器进行处理。它同时指示其包括在内的控件可被服务器脚本访问。

以下给出最常用的ASP.NET服务器控件,并与以前使用的HTML窗体标记符进行比较:

ASP.NET 服务器控件对应的HTML窗体标记符作用
<asp:label><Span>,<Div>,简单文本显示文本
<asp:listbox><Select>为用户提供一个选项列表,让用户从中选择
<asp:dropdowmlist><Select>以紧凑的方式为用户提供一个选项列表,让用户从中选择
<asp:textbox><input Type="Text">用户输入的可选择内容
<asp:radiobutton>和<asp:radiobuttonlist><input Type="Radio">允许用户从一个选项列表中做出选择
<asp:checkbox>和<asp:checkboxlist><input Type="Checkbox">允许用户打开或关闭一个功能
<asp:button><input Type="submit">把用户的输入发送到服务器

ASP.NET - Web 服务器控件

Web 服务器控件是服务器可理解的特殊 ASP.NET 标签

类似 HTML 服务器控件,Web 服务器控件也在服务器上创建,它们同样需要 runat=”server” 属性以使其生效。不过,Web 服务器控件没有必要映射任何已存在的 HTML 元素,它们代表更复杂的元素。

创建 Web 服务器控件的语法是:

在下面的例子中,我们在 .aspx 文件中的声明了一个 Button 服务器控件。然后我们为 Click 事件创建了一个事件处理程序,它可修改按钮上的文本:

<script runat="server">
Sub submit(Source As Object, e As EventArgs)
button1.Text="You clicked me!"
End Sub
</script>

<html>
<body>

<form runat="server">
<asp:Button id="button1" Text="Click me!" runat="server" OnClick="submit"/>
</form>

</body>
</html>

ASP.NET - Validation 服务器控件

Validation 服务器控件用于验证用户输入。如果用户输入没有通过验证,将向用户显示一条错误消息。

每种 validation 控件执行一种特定的验证类型(比如验证某个具体的值或者某个范围的值)。

默认地,当点击Button, ImageButton或LinkButton 时,就会执行页面验证。您可通过把 CausesValidation 属性设置为 false,来阻止某个按钮控件被点击时进行验证。

创建 Validation 服务器控件的语法是:

在下面的例子中,我们在 .aspx 文件中声明了一个 TextBox 控件,一个 Button 控件,以及一个 RangeValidator 控件。如果验证失败,文本 “The value must be from 1 to 100!” 将显示在 RangeValidator 控件中:

<html>
<body>
<form runat="server">

<p>Enter a number from 1 to 100:
<asp:TextBox id="tbox1" runat="server" />
<br /><br />
<asp:Button Text="Submit" runat="server" />
</p>

<p>
<asp:RangeValidator
ControlToValidate="tbox1"
MinimumValue="1"
MaximumValue="100"
Type="Integer"
Text="The value must be from 1 to 100!"
runat="server" />
</p>

</form>
</body>
</html>

Page类

每一个Web页面实际上都是一个继承自System.Web.UI.Page类的用户自定义的类。通过从Page基类继承,Web页面获得了大量的属性和方法,以供程序员在代码使用。

这些继承的特性包括了允许缓存功能、验证以及跟踪调试等。

以下简要的列出了Page类一些重要的基本属性

属性描述
IsPostBackIsPostBack是一个布尔值。当IsPostBack属性为false时,表示该页面是第一次被当前用户请求;当IsPostBack属性为true时,表示该页面是响应控件事件而提交的回传请求,此时页面通常在视图状态中保存了页面的相关信息。在页面的Page.Load事件处理方法中,通常检查IsPostBack属性,以判断页面是第一次被当前用户请求还是回传请求,以确保用于初始化Web页面的代码只被执行一次
EnableViewState该值只是当前页请求结束时,该页是否保持其视图状态,以及是否保持它包含的每一个服务器控件的视图状态。当把Web页面的EnableViewState属性设置为false时,将覆盖页面中所包含的所有控件的EnableViewState属性,此时页面上的所有控件都不能维护控件的状态信息
ApplicationApplication属性是一个保存应用程序级别信息的集合,该集合用于保存当前Web网站中所有被用户共享的信息。例如,可以使用Application集合来记录页面被访问的次数
SessionSession属性是一个保存单个用户会话信息的集合,会话信息可以在不同的多个页面之间共享。例如,在一个电子商务的网站中,可以使用Session集合来保存当前用户的购物车
CatheCathe属性是一个集合,用于保存那些在创建时比较耗费时间的对象,以便在其他用户访问页面时或在其他页面中快速地重用这些对象。适当的使用该技术可以有效提高Web页面的执行性能。
RequestRequest属性是一个对当前页面的HttpRequest对象的引用,其中包含了当前Web请求的相关信心。通过HttpRequest对象,可以获得发起请求的客户端浏览器的详细信息,ASP.NET可以自己处理这些细节信息,因而获取这些浏览器详细信息的意义不大。但是,可以使用HttpRequest对象,通过使用查询字符(query string),将信息从一个页面传递给另一个页面。
ResponseResponse属性是一个对当前页面的HttpResponse对象的引用,它表示ASP.NET将要发送给客户端浏览器的响应。
ServerServer属性是一个队当前页面的HttpServerUtility对象的引用,通过该对象可以执行一些杂项的任务,比如,可以对字符串进行编码,以便这些字符串可以安全的存放在URL中
User如果访问网站的用户已经通过了验证,则User属性被初始化为当前用户的信息

事件驱动编程与回送

事件驱动编程从本质上改变了编程模型。
利用事件,服务器上不再是以顺序执行的方式完成任务。

代码的执行顺序取决于与用户的交互

ASP.NET支持三组事件

  • 第一组是HTML内部的事件,这些事件可以在页面上发生,并由浏览器在客户端处理。例如:在客户端JavaScripts中运行的弹出工具提示。

  • 第二组是ASP.NET生成页面时自动发生的几个事件(ASP.NET页面级事件)。它们不需要用户干涉,在用户看到页面之前发生,我们使用这些事件建立页面。特别重要的页面级事件是postback,在用户单击提交按钮后,页面重新提交给服务器时触发。

  • 最后一组最大,包含用户与页面交互时发生的所有事件。

HTML事件

例:鼠标点击事件

<html>
<head>
    <title>HTML Event Example</title>
</head>
<body>
    <form>
        <input onclick="alert('You have raised an event!')"
         type="button" value="Click Me"/>
    </form>
</body>
</html>

ASP.NET的页面事件

ASP.NET中的一切元素均可归结为对象,特别是page对象。用户创建的每一个Web窗体都是一个page对象。可以将整个Web窗体看成是一个输出为HTML的可执行程序。每当访问服务器时都会经历这些阶段。

在请求ASP.NET Web窗体时,在Web服务器上就会自动发生一系列事件,如下所示:

Page_Init()事件

当初始化页面时发生此事件。可以利用 Page_Init()将该事件与要在.NET在页面上显示控件之前运行的代码建立关联。该事件与Page_Load事件的工作方式相同,但在Page_Load事件之前发生。

如果希望页面上的代码在其他事件发生之前执行,就需要把它们放在Page_Init()事件处理过程中。

Page_PreRender() 事件和Page_Render()

支持高级论题,如事务处理。

Page_Load()事件

整个页面第一次可见时发生(即在页面被读入内存,进行处理时发生),但在利用Page_Init实现某些服务器控件的初始化并显示出这些控件之后发生。

页面加载事件会自动调用Page_Load()事件处理过程。

Page.IsPostBack 属性

Page_Load 子例程会在页面每次加载时运行。
如果您仅希望在页面第一次加载时执行 Page_Load 子例程中的代码,您可以使用 Page.IsPostBack 属性。如果 Page.IsPostBack 属性为 false,则页面第一次被载入,如果为 true,则页面传回服务器(例如,通过点击表单上的按钮):

<script runat="server">
Sub Page_Load
if Not Page.IsPostBack then
  lbl1.Text="The date and time is " & now()
end if
End Sub

Sub Submit(s As Object, e As EventArgs)
lbl2.Text="Hello World!"
End Sub
</script>

<html>
<body>
<form runat="server">
<h3><asp:label id="lbl1" runat="server" /></h3>
<h3><asp:label id="lbl2" runat="server" /></h3>
<asp:button text="Submit" onclick="submit" runat="server" />
</form>
</body>
</html>

上面的例子仅在页面初次加载时创建 “The date and time is….” 这条消息。当用户点击 Submit 按钮时,submit 子例程将在第二个 label 创建 “Hello World!”,但第一个 label 中的日期和时间不会改变。

Page_Unload()事件

页面从IIS内存中卸载并发送给浏览器时发生。在控件事件处理后发生。改事件非常适用于关闭数据库的连接。其名称容易产生误导,因为这个事件并不是浏览器中的用户退出页面或关闭浏览器时发生。术语Unload是从IIS的角度来看的,而不是浏览器。

该事件最适合于结束资源的适用,例如关闭数据库连接。由于Page_Unload()事件是在ASP.NET页面的其他内容完成后执行,所以不能适用他来改变ASP.NET控件。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值