Web 窗体页处理
一般来讲,Web 窗体页的生命周期类似于在服务器上运行的任何 Web 进程的生命周期。Web 处理的某些特性(通过 HTTP 协议传递的信息、Web 页的无状态特性等)应用到 Web 窗体页,就象它们在大多数 Web 应用程序中所做的一样。
但是,https://www.doczj.com/doc/9c7541598.html, 页框架为您执行许多 Web 应用程序服务。例如,https://www.doczj.com/doc/9c7541598.html, 页框架捕获由 Web 窗体页发送的信息,提取相关值,并使信息可通过对象属性访问。
理解在处理 Web 窗体页时发生的事件的顺序是十分重要的。这一知识将帮助您效率更高地对 Web 窗体页和 Web 应用程序进行编程。
Web 窗体页的生命周期
您可能会发现,在检查处理页面时页内所发生情况的详细信息前理解 Web 窗体页在 Web 应用程序中的工作方式的某些基本特性可能会很有帮助。
往返行程
需要理解的最重要概念之一就是 Web 窗体页中工作的划分。浏览器向用户展示一个窗体,用户与该窗体进行交互,这导致该窗体回发到服务器。但是,因为与服务器组件进行交互的所有处理必须在服务器上发生,这意味着对于要求处理的每一操作而言,必须将该窗体发送到服务器、进行处理、然后返回到浏览器。这一事件序列称作“往返行程”。
注意可以在Web 窗体中创建客户端脚本,这对于用户输入验证和某些UI 编程类型十分有用。客户端脚本不与服务器组件交互。
假设这样一种业务方案:用户输入一个订单并且您要确认对该订单有足够的库存,因而您的应用程序在用户订单输入过程中的一个合适的时间点将该页发送给服务器。服务器进程检查该订单,执行库存查找,可能执行在业务逻辑中定义的某些操作(例如修改该页以指示一个错误),然后将该页返回到用户的浏览器以继续。
往返行程
在 Web 窗体中,大多数用户操作(例如单击一个按钮)将导致往返行程。因此,https://www.doczj.com/doc/9c7541598.html, 服务器控件中的可用事件通常仅限于 Click 类型的事件。大多数服务器控件公开一个 Click 事件,该事件要求显式的用户操作。
通过相同的标记,服务器控件不公开诸如onmouseover之类的高频率事件,因为每次引发此类事件时,将发生到服务器的另一个往返行程,这将显著影响窗体中的响应时间。
重新创建页(视图状态和状态管理)
在任何 Web 方案中,每一次往返行程都需要重新创建页。只要服务器完成处理并完成将页发送到浏览器,它就放弃该页的信息。通过在每一请求后释放服务器资源,可以扩展 Web 应用程序以支持数百或数以千计的同时运行的用户。下一次发送该页时,服务器重新开始创建和处理该页;因此,认为 Web 页是“无状态的”——在服务器上不保留页变量和控件的值。
注意可以将服务器配置为缓存页信息以优化页,但出于应用程序编程目的,将这些页视作服务器一完成对它们的处理就处置它们最为清晰。
在传统的 Web 应用程序中,服务器所具有的有关一个窗体的唯一信息就是用户已添加到窗体的控件上的信息,因为当发送窗体时将这些信息发送给服务器。其他信息(例如变量值和属性设置)将被放弃。
https://www.doczj.com/doc/9c7541598.html, 通过以下方法克服了这些限制:
它在往返行程间保存页和控件属性。这称作保存控件的视图状态。
?它提供状态管理功能,以便您可以在往返行程间保存您自己的变量和特定于应用程序或特定于会话的信息。
?它可以检测是第一次请求窗体还是发送窗体,这使您可以相应地进行编程。您可能希望页回发期间的行为与初始请求的行为不同。
事件驱动模型与线性处理模型的优点
如果您具有使用 Active Server Pages (ASP) 的经验,您将认识到 ASP 是线性处理模型。ASP 页是按从上到下的顺序处理的。ASP 代码和静态 HTML 的每一行都按其在文件中的显示顺序进行处理。在往返行程中用户操作导致页被发送到服务器。因为此操作导致往返行程,所以服务器必须重新创建该页。在重新创建该页后,将通过与以前相同的从上到下的顺序对该页进行处理,因此,该页未表现出真正的事件驱动行为。若要创建事件驱动体验,您需要显式设计它。此外,您必须在最基本的级别上显式维护页和控件状态。此模型限制了可以组合的用户界面的丰富程度,并且此模型增加了需要支持它的代码的复杂性。
与此相比,传统 Visual Basic 应用程序中的事件驱动模型包含可编程的元素,这些元素可被初始化并在窗体上显示。用户与这些元素进行交互,而这又导致引发调用事件处理程序的事件。此模型支持真正的事件驱动行为,这在设计上极大拓宽了可以组合的用户界面的丰富程度,并且降低了需要支持它的代码的复杂性。
https://www.doczj.com/doc/9c7541598.html, 通过模拟事件驱动模型的行为代替了 ASP 的线性处理模型。提供https://www.doczj.com/doc/9c7541598.html, 页框架以隐式地为您建立事件和事件处理程序的关联。利用该页框架,您可以很容易地创建响应用户操作的用户界面。有关创建和使用事件及事件处理程序的详细信息,请参阅Web 窗体页中的服务器事件处理。
此外,这一相同的框架可以简化页和控件状态管理的实施。有关状态管理的更多信息,请参阅Web 窗体状态管理。
例如,https://www.doczj.com/doc/9c7541598.html, 使您可为从浏览器传递的事件在服务器代码中设置事件处理程序。假定用户正在与某 Web 窗体页进行交互,该 Web 窗体页包含一个按钮服务器控件。用户单击该按钮 (Button) 控件并引发一个事件,该事件通过 HTTP 发送被传输到服务器中。在该服务器中,https://www.doczj.com/doc/9c7541598.html, 页框架解释发送的信息并将引发的事件与相应的事件处理程序关联。该事件处理程序可以是 https://www.doczj.com/doc/9c7541598.html, 提供的默认处理程序,也可以是您的自定义实现。框架自动为该按钮调用相应的事件处理程序,作为框架正常处理的一部分。因此,您不再需要显式将类似事件的行为设计成线性处理模型。有关 Web 窗体事件处理的更多信息,请参阅https://www.doczj.com/doc/9c7541598.html, 服务器控件事件模型。
Web 窗体处理中的各个阶段
https://www.doczj.com/doc/9c7541598.html, 页框架通过不同的阶段对 Web 窗体页进行处理。在 Web 窗体处理的每一阶段,都可能会引发事件,并且将运行与该事件相对应的任何事件处理程序。这些方法向您提供入口点(挂钩),使您可以更新 Web 窗体页的内容。
下表列出了页处理的最普通的阶段,这些阶段发生时引发的事件,以及每一阶段的典型使用。每当请求或发送窗体时就重复这些阶段。Page.IsPostBack 属性使您能够测试是否是第一次处理该页。
注意有几个Web 窗体页处理阶段没有在下表中列出。但是,它们不用于大多数页处理方案。这些阶段主要是由Web 窗体页上的服务器控件使用,以初始化和呈现它们本身。如果您打算编写自己的https://www.doczj.com/doc/9c7541598.html, 服务器控件,则需要详细了解这些阶段。有关页处理阶段完整集合的详细信息,请参阅开发https://www.doczj.com/doc/9c7541598.html, 服务器控件。
阶段意义典型使用
https://www.doczj.com/doc/9c7541598.html, 页框架初始化引发该页的Page_Init事件,并
还原该页和控件视图状态。
在此事件期间,https://www.doczj.com/doc/9c7541598.html, 页框架还原控
件属性和回发数据。
用户代码初始化引发页的Page_Load事件。读取和还原以前存储的值:
?使用Page.IsPostBack属性,检
查是否是第一次处理该页。
?如果是第一次处理该页,则执行
初始数据绑定。
?否则,还原控件值。
?读取和更新控件属性。
验证调用任何验证程序Web 服务
器控件的Validate 方法来执行
该控件的指定验证。(此阶段没有用户挂钩。可以在事件处理程序中测试验证的结果。)
事件处理如果已调用该页来响应窗体事
件,则在此阶段期间调用该页中
的相应事件处理程序。执行特定于应用程序的处理:
?处理所引发的特定事件。
注意事件不按特定顺序引发,
只有缓存的控件事件(由控件的
AutoPostBack属性指定)始终
在发送事件前处理。
?如果该页包含https://www.doczj.com/doc/9c7541598.html, 服务器控件验证类型,则检查该页和各
个验证控件的IsValid属性。
?手动保存您正自行维护的页变量的状态。
?检查该页或各个验证控件的
IsValid 属性。
?手动保存动态添加到该页的控件的状态。
清除调用Page_Unload事件,因为
该页已完成呈现并准备好被放
弃。执行最后的清除工作:
?关闭文件。
?关闭数据库连接。
?放弃对象。
注意显式关闭代价高昂的资源
(例如数据库连接)是十分重要
的。否则,它们将在下一次发生
垃圾回收前一直保持打开。在负
荷很重的服务器上,如果有许多
资源打开,可能会影响其性能。
请参见
Web 窗体的用户输入验证简介 | Web 窗体页中的数据访问 | https://www.doczj.com/doc/9c7541598.html, 服务器控件事件模型 | Web 窗体状态管理介绍 | https://www.doczj.com/doc/9c7541598.html, 状态管理 | Web 窗体页
https://www.doczj.com/doc/9c7541598.html, 服务器控件事件模型
由 https://www.doczj.com/doc/9c7541598.html, 服务器控件引发的事件的工作方式与传统的客户端窗体中的事件或基于客户端的 Web 应用程序中的事件的工作方式稍有不同。导致差异的主要原因在于事件本身与处理该事件的位置的分离。
在基于客户端的应用程序中,在客户端引发和处理事件。另一方面,在 Web 窗体页中,与服务器控件关联的事件在客户端引发,但由 https://www.doczj.com/doc/9c7541598.html, 页框架在 Web 服务器上处理。
对于在客户端引发的事件,Web 窗体控件事件模型要求在客户端捕获事件信息,并且通过 HTTP 发送将事件消息传输到服务器。此页框架必须解释该发送以确定所发生的事件,然后在要处理该事件的服务器上调用代码中的适当方法。有关更多信息,请参阅 https://www.doczj.com/doc/9c7541598.html, 服务器控件中的事件。
Web 窗体控件事件模型
https://www.doczj.com/doc/9c7541598.html, 实际上处理所有捕获、传输和解释事件的机制。当您在 Web 窗体页中创建事件处理程序时,无需考虑如何捕获事件信息并使其可用于您的代码的机制,即可执行事件处理程序的创建。而且您创建事件处理程序的方式与您在传统的客户端窗体上的创建方式大体相同。虽然如此,Web 窗体页中的事件处理仍有一些您应该注意的方面。
内部事件集
因为大多数 Web 窗体事件要求到服务器的往返行程以进行处理,所以这些事件可能影响窗体的性能。因此,服务器控件仅提供一组有限的内部事件(通常仅限于 Click 类型事件)。某些服务器控件支持 onchange 事件的特殊版本,该事件在控件的值发生更改时被引发。例如,CheckBox Web 服务器控件在用户单击框时引发更改事件。对于服务器控件,不支持经常发生的事件(并且可能在用户不知道的情况下引发),例如 onmouseover 事件。
注意某些服务器控件支持更高级别的事件的集合。例如,Calendar Web 服务器控件引发SelectionChanged事件,该事件是Click事件的更抽象的版本。
事件参数
Web 和 HTML 服务器控件事件遵循事件处理程序方法的标准 .NET 框架模式。所有事件都传递两个参数:表示引发事件的对象的对象,以及包含任何事件特定信息的事件对象。第二个参数通常是System.EventArgs类型,但对于某些控件而言是特定于该控件的类型。例如,对于ImageButton Web 服务器控件,第二个参数是ImageClickEventArgs类型,这包括有关用户所单击处坐标的信息。
Web 服务器控件中的回发和非回发事件
在 Web 服务器控件中,某些事件(通常是 Click 事件)会导致将窗体回发到服务器。HTML 服务器控件和 Web 服务器控件(例如TextBox控件)中的更改事件将被捕获,但不会立即导致发送。而是由控件缓存这些事件,直到下一次发生发送。然后当在服务器上再次处理该页时,引发和处理所有挂起的事件。
注意如果浏览器支持它,验证控件可以使用客户端脚本检查用户输入,而无需到服务器的往返行程。有关详细信息,请参阅Web 窗体的用户输入验证简介。
在服务器页处理期间,首先处理事件,处理时没有特定的顺序。当处理完所有更改事件后,处理导致发送窗体的 Click 事件。
注意如果您不是对页事件处理方面的知识有着透彻的了解,则不应创建依赖于按特定顺序引发的更改事件的应用程序逻辑。有关更多信息,请参阅回发事件示例。
可以指定更改事件导致窗体发送。支持更改事件的 Web 服务器控件包括AutoPostBack属性。当该属性为真时,控件的更改事件导致立即发送窗体,而不等待 Click 事件。例如,默认情况下,CheckBox控件的CheckedChange事件不会导致该页被提交。但是,通过将该控件的AutoPostBack属性设置为true,可以指定当用户单击复选框时,立即将该页发送到服务器进行处理。
注意为了使AutoPostBack属性正确工作,用户的浏览器必须设置为允许脚本撰写。这在大多数情况下是默认设置。但是,有些用户出于安全性方面的原因禁用了脚本撰写。有关详细信息,请参阅https://www.doczj.com/doc/9c7541598.html, 服务器控件和浏览器功能。
冒泡事件
诸如Repeater、DataList和DataGrid控件之类的 Web 服务器控件可以包含自身引发事件的按钮 (Button) 控件。例如,DataGrid控件中的每一行可以包含由模板动态创建的一个或多个按钮。
与单独引发一个事件的每个按钮不同,来自嵌套控件的事件是“冒泡的”——也就是说,这些事件将发送到容器。该容器通过使您可以发现引发该原始事件的单独控件的参数,反过来引发称作ItemCommand的一般事件。通过响应此单个事件,可以避免不必要地为子控件编写单独的事件处理程序。
ItemCommand事件包括两个标准事件参数,即引用事件源的对象和包含特定于事件的信息的事件对象。
注意DataGrid和DataList Web 服务器控件支持附加事件,例如EditCommand、DeleteCommand和UpdateCommand,它们是冒泡事件的特殊事例。
对于按钮,可以使用CommandArgument属性向事件处理程序发送一个用户指定的字符串,以帮助您确定引发该事件的按钮。例如,在一个DataList控件中,按钮引发ItemCommand事件。您可以将每个按钮的CommandArgument属性设置为不同的值——有可能一个按钮的值为“ShowDetails”而另一个按钮的值为“AddToShoppingCart”,随后在该事件处理程序中捕获这些值。
Web 窗体页中的事件委托
一个事件就是一个消息——实际上就是类似于“某按钮已被单击”的消息。在应用程序中,需要该消息被翻译成代码中的方法调用,如“Button1_Click”。事件消息和特定方法(即事件处理程序)之间的绑定是通过事件委托来实现的。有关更多信息,请参阅事件和委托。
在 Web 窗体页中,通常无需对委托进行显式编码。如果使用 Visual Studio 中的 Web 窗体设计器,该设计器将生成自动将事件绑定到方法的代码。在Visual Basic 中,可使用事件处理程序声明中的 Handles 关键字来完成此任务,如以下示例所示:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
在 Visual C# 中,设计器将在页中生成类似于以下内容的显式事件处理程序委托:
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
此外,https://www.doczj.com/doc/9c7541598.html, 页框架还支持以自动方式将页事件与方法相关联。如果 Page 指令的AutoEventWireup属性被设置为true(或者如果缺少此属性,因为它默认为true),该页框架将自动调用页事件,即Page_Init和Page_Load方法。在这种情况下,不需要任何显式的Handles子句或委托。
AutoEventWireup属性的缺点是它要求页事件处理程序具有特定、可预测的名称。这限制了您在为事件处理程序命名时的灵活性。因此,在 Visual Studio 中,AutoEventWireup属性在默认情况下设置为false,设计器会生成用于将页事件绑定到方法的显式代码。
如果将AutoEventWireup设置为true,Visual Studio 将生成用于绑定事件的代码,页框架将自动基于事件的名称来调用事件。这可能会导致在该页运行时两次调用相同的事件代码。因此,当在 Visual Studio 中操作时,应尽量使AutoEventWireup设置为false。
响应 ASP .NET 服务器控件中的客户端和服务器事件
在很大程度上,您主要会关心在服务器代码中引发的事件。但是,如果对于您的应用程序是适当的,也可以通过编写客户端脚本来处理 https://www.doczj.com/doc/9c7541598.html, 服务器控件的客户端事件。
注意 不能使用 HTML 语法来绑定到 Web 服务器控件的客户端事件,而必须使用代码添加事件绑定属性。有关示例,请参阅下表。
例如,您可能具有已转换为 HTML 服务器控件的 HTML 图像按钮元素。通常,在 Web 窗体页中,您将在服务器代码中处理图像按钮的 Click 事件。但是,您可能还想要使用客户端代码在用户将鼠标移到图像上时更改该图像。可以通过为图像按钮的 onmouseover 事件创建客户端脚本来做到这一点。(在此示例中,假设使用支持 HTML 4.0 的浏览器,例如 Microsoft Internet Explorer 4.0 或更高版本。)
注意 在客户端事件处理程序和服务器端事件处理程序具有相同的事件处理程序名称的情况下,总是首先运行客户端事件处理程序,然后运行服务器事件处理程序。但是,允许这种情况出现会导致混乱,因此强烈建议对命名规则进行一些规划。
处理客户端和服务器代码中的 Click 事件
如果要在客户端和服务器上处理事件,有一个事件会给您带来麻烦,它就是客户端 onclick 事件。之所以会出现问题,是因为所有按钮服务器控件(以及其他 AutoPostBack 属性设置为 true 的控件)都会将页提交到服务器。但是,在 HTML 中,只有少数几个控件本来就会提交窗体:
?
HTML 提交按钮 (),即类型设置为 Submit 或 Image 的 HtmlInputButton 控件。可以从“工具箱”的“HTML”选项卡中添加此控件。 ? Button Web 服务器控件 (
对于其他所有被指定为提交页的控件,会将一个小的客户端脚本写入页中,并在该控件被单击时调用此脚本来提交窗体。因此,这些控件已使用客户端 OnClick 事件来调用此提交脚本。
可以为所有控件创建客户端 OnClick 处理程序,但需要选择使用每种控件的方式。下表总结了针对不同类型的控件采用的策略。
f
控件 策略
HtmlInputButton ,它包括类型设置为 Submit 、Reset 或 Image 的 HTML 服务器控件按钮 为该控件在 HTML 语法中包含一项 onclick 属性:
onclick="clientfunction()" ...>
在服务器端,这些类型的按钮会引发ServerClick 事件,而不是简单的
Click事件。首先会引发客户端事件,然后提交窗体并处理服务器事件。
其他所有HTML 控件(默认情况下不提交窗体的HTML 控件)为该控件在HTML 语法中包含一项onclick 属性,并在该属性后添加一个分号(;):
onclick="clientfunction();" ...>
这样,在调用客户端提交脚本之前,将首先调用您的函数。
Web 服务器控件,包括按钮(
Button1.Attributes.Add("onclick", "clientfunction();")
注意对于Button Web 服务器控件无需添加分号,因为该控件会自动提交页。
应用程序和会话事件
除了页和控件事件之外,https://www.doczj.com/doc/9c7541598.html, 页框架为您提供了多种使用事件的方法,这些事件可以在应用程序启动或停止时被引发,也可以在单个用户的会话开始或停止时被引发:
?对于所有对应用程序的请求,都将引发应用程序事件。例如,当请求应用程序中的任何Web 窗体页或XML Web services 时,都将引发Application_BeginRequest
事件。该事件使您可以初始化资源,这些资源将用于对应用程序的每一请求。相应的Application_EndRequest事件使您可以有机会关闭或处置用于该请求的资源。
?会话事件类似于应用程序事件(会话事件有Session_OnStart和Session_OnEnd 事件),但会话事件由应用程序内每一唯一的会话引发。当用户第一次从应用程序请求页时开始一个会话,当应用程序显式关闭该会话或当会话超时时该会话结束。
您可以在 Global.asax 文件中为这些类型的事件创建处理程序。有关详细信息,请参阅 Global.asax 文件和 Global.asax 语法。
请参见
Web 窗体页中的服务器事件处理 | Global.asax 文件 | Web 窗体状态管理介绍| 使用 Httpapplication 实例
在 Web 窗体页中创建事件处理程序
控件有一个默认事件,即最经常地与该控件关联的事件。例如,按钮的默认事件是 Click 事件。您可以为默认事件和其他创建事件处理程序;但是对于每种事件,创建的过程会有所不同。
创建默认事件的事件处理程序
?在 Web 窗体设计器的“设计”视图中,双击该控件或页。
“代码编辑器”打开,插入点已位于事件处理程序中。
为非默认事件创建处理程序是一个不同的过程。此过程对于 Visual Basic 和 Visual C# 有所不同,因为 Web 窗体设计器用户界面对于这两种语言稍有不同。
在 Visual Basic 为非默认事件创建事件处理程序
1.打开或切换到代码编辑器以编辑该页。
2.在窗口的顶部,从左侧的下拉列表中选择控件,然后从右侧的下拉列表中
选择事件。
注意其对应方法已存在的事件将以粗体显示。
事件处理程序被创建。
Visual Basic 创建事件处理程序并将其添加到窗体的类中。
在 Visual C# 中为非默认事件创建事件处理程序
1.在“设计”视图中选择控件,然后按 F4 键显示“属性”窗口。
2.在“属性”窗口中,单击“事件”按钮 ()。
“属性”窗口显示控件的事件列表,其右侧的框显示绑定到这些事件的事件处理程序的名称。
3.定位要为其创建处理程序的事件,然后:
?在事件名称框中键入事件处理程序的名称。
或
?双击事件名称框,创建一个其名称遵循controlID_eventname约定的处理程序。
新的事件处理程序将使用您键入的名称或使用已生成的名称来创建。
绑定到 Web 窗体页中的现有事件处理程序
如果页中已包含事件处理方法,则可以将一个事件绑定到该方法,而不用创建新的处理程序。此过程对于 Visual Basic 和 Visual C# 稍有不同。
使用 Visual Basic 绑定到 Web 窗体中的现有事件处理程序
?修改事件处理程序声明,包含一个Handles 关键字来指定要绑定到方法的事件,如以下示例所示:
Sub MyEventHandler (ByVal sender as System.Object, ByVal e as
System.EventArgs) Handles Button1.Click
注意将由您来确保方法签名(方法参数的编号和类型)对于要绑定到的事件是正确的。
使用 Visual C# 绑定到 Web 窗体中的现有事件处理程序
1.在“设计”视图中,选择要将其事件绑定到某方法的控件。
2.在“属性”窗口中,单击“事件”按钮()。
“属性”窗口显示控件的事件列表,其右侧的框显示绑定到这些事件的事件处理程序的名称。
3.从下拉列表框中,选择要将事件绑定到的方法。该列表中显示的方法是对
于要处理的事件具有正确签名的方法。
运行时在 Web 窗体页中创建事件处理程序
如果已具有含适当签名的事件处理程序,可以在运行时将控件事件绑定到该事件处理程序。
使用 Visual Basicr 在运行时在 Web 窗体中创建事件处理程序?包含一个 AddHandler 语句,并向其传递要绑定的事件和要调用的方法的地址。请确保在可以引发该事件之前(通常是在页初始化阶段添加处理程
序之前)执行此语句。以下示例显示如何将Button1控件的Click事件绑定到名为 myEventHandler 的方法:
AddHandler Button1.Click, AddressOf myEventHandler
使用 Visual C# 在运行时在 Web 窗体中创建事件处理程序
?创建 EventHandler 委托的实例,并向其传递要绑定到的方法的地址。然后,当事件被引发时,将该委托对象添加到所调用方法的列表中。以下示例显示如何将Button1控件的Click事件绑定到名为 myEventHandler 的方法:
this.Button1.Click += new
System.EventHander(this.myEventHandler);
将多个事件连接到 Web 窗体页中的单个事件处理程序
如果已具有一个事件处理程序,可以将几个控件事件绑定到该事件处理程序。多个事件可以来自同一个控件,或者一个事件可以来自多个不同的控件(只有这些事件都具有相同的签名)。例如,您可能需要将 Web 窗体页上几个Button Web 服务器控件的Click事件绑定到单个事件处理程序。
对于 Visual Basic 和 Visual C#,必须将特定代码添加到代码隐藏文件中的事件处理程序方法签名。
在 Visual Basic 中将多个事件连接到单个事件处理程序
?通过添加某方法应处理的事件的名称修改该方法的 Handles 子句。使用逗号分隔事件名称。
以下示例显示如何将 MyMultipleEventHandler 方法绑定到由三个控件
引发的事件:
Sub MyMultipleEventHandler (ByVal sender as System.Object, ByVal
e as System.EventArgs) Handles Button1.Click, Button2.Click,
Button3.Click
注意将由您来确保该方法对于它所处理的事件具有正确的签名。
如果使用的是 Visual C#,可以使用 Web 窗体设计器将多个控件事件与单个事件处理程序关联。
在 Visual C# 中将多个事件连接到单个事件处理程序
1.在“设计”视图中,选择一个要将其事件绑定到某方法的控件。
2.在“属性”窗口中,单击“事件”按钮 ()。
“属性”窗口显示控件的事件列表,其右侧的框显示绑定到这些事件的事件处理程序的名称。
3.从下拉列表中选择要将该事件绑定到的方法。该列表中显示的方法是对于
要处理的事件具有正确签名的方法。
代码编辑器打开,显示已选定的方法。此外,将向该页的
InitializeComponent方法中添加一行以执行绑定。下面显示一个示例:
this.Button1.Click += new
System.EventHandler(this.myEventHandler);
4.对于要将其事件绑定到该方法的下一个控件重复第 1 步至第 3 步。
1.选择题 https://www.doczj.com/doc/9c7541598.html,页面是完全面向对象的。在https://www.doczj.com/doc/9c7541598.html,网页中,可以使 用(ABC)来处理HTML元素。 A.属性 B.方法 C.事件 D.过程 2. (B)不属于https://www.doczj.com/doc/9c7541598.html,开发和运行环境。 A.安装IIS B.SQL SERVER 数据库 C.安装.NET FRAMEWORK SDK D.VISUAL https://www.doczj.com/doc/9c7541598.html, 3. .NET Framework旨在实现目标包括(ABCD). A.提供一个一致向对象的编程环境,而无论对象代码实在本地 存储和执行,还是在本地执行但在Internet上分布,或者是在远程 执行的。 B.提供一个将软件部署和版本控制冲突最小化的代码执行环境。 C.提供一个可提高代码执行安全性的代码执行环境。 D.提供一个可消除脚本环境或解释环境的性能问题的代码执行 环境。 4. HTTP常用请求方法包括(ABCD). A.PUT B.LINK C.DELETE D.UNLINK 5. .NET Framework具有的主要组件是(B). A.公共语言运行库 https://www.doczj.com/doc/9c7541598.html, FRANEWORK类库 C.动态语言运行时 C.中间语言 6. 下列类型属于引用类型的有(AC). A.类类型 B.结构体 C.数组 D.枚举 7. 下列关键词中,(D)不能用于循环。 A.FOR B.FROEACH C.WHILE D.OBJECT 8. 下列选项中(D)没有分支功能. A.IF B.SWITCH C.?: D.CLASS
9. 下列说法中不正确的是(C). A.C#中以“,”作为一条语句的结束 B.C#中注释是不参与编译的 C.C#有3种不同的注释类型 D.switch语句中case标签结束可以有跳转语句,也可以没有 10. 下列关于变量的说法中正确的是(A). A.C#中变量可划分为值类型和引用 B.在同一行中可以申请多个变量 C.可以在定义变量的同时为其赋值 D.变量是用来存放数据值得 11. 设置(A)属性可以决定Web服务器了控件是否可用。 A.ENABLE B.VISIABLE C.ID D.SELECTED 12. 要使用户能够在ListBox控件中一次选中多个项,则必须 (B) A. 将其SelectionMode属性设置为SINGLE B. 将其SelectionMode属性设置为Multiple C. 将其AUTOPOSTBACK属性设置为SINGLE D. 将其AUTOPOSTBACK属性设置为Multiple 13. 下列选项中,(ABC)选项属于Image类的ImageAlign属性。 A.LEFT B.RIGHT C.TOP D.TEXT_MIDDLE 14. TextBox控件用来获取或设置文本框中最多允许的字符数的属性是(B) A.COLUMNS B.MAXLENGTH C.ROWS D.WIDTH 15. 如果要设置在ImageButton控件中显示的图片的位置,需要设置它的(C) A.IMAGEURL B.TOOLTIP C.IMAGEALIGN D.POSTBACKURL
一、填空题(每空2分,共30分): (1)默认安装中,IIS服务器被安装在“[硬盘名]:\”的目录下。对应的URL是或 答案:http://服务器域名;Inetpub\wwwroot (2) 所闻分布式类就是在多个文件中使用相同的命名空间,相同的类名,而且每个类的定义前面都加上____修饰符,编译时编译器就会自动的将这些文件编辑成一个完整的类。 答案:partial (3) 当一个Web控件上发生的事件需要立即得到响时,应该将他的属性设置为true。 答案: AutoPostBack (5)比如在应聘表单的界面上要放入【保存】和【复位】两个按钮,其中【复位】按钮采用的HTML Reset按钮控件,而【保存】按钮则必须是按钮控件。 答案:服务器 (6)当需要将TextBox控件作为密码输入框时(要求隐藏密码的代码),应该将控件的TextMode属性设置为 . 答案:Password (7) 在设计阶段必须将各个验证控件的属性指向被验证的控件。答案:ControlToValidate (8)使用RegularExpression控件验证输入时,首先要将本控件的属性设置成检查的模式。 答案:ValidationExpress (8) 状态分为4种类型,它们是:视图状态,应用程序状态,会话状态,和——。 答案:Cookie状态。 (9)下面是设置和取出Session对象的代码。 设置Session的代码是: Session[“greeting”]=“hello wang !”; 取出该Session对象的语句如下: string Myvar ; 答案:=Session[“greeting”].ToString()。 (10) 下面是使用Application对象时防止竞争的代码。 Application. ; //锁定Application对象 Application[“counter”]=(int) Application[“counter”]+1; Application. ; //解除对Application对象的锁定 答案:lock() unlock() (11)废除Session的语句是:。 答案: Session.Abandon() (11)改变Session的有效时间的语句是:。 答案:Session.Timeout=60; (12) 文档对象模型DOM是英文的缩写,它是DHTML的基础。 答案:Document Object Model
1. 以下几个IP地址中()不是合法的IP地址? A.204.1546.21.106 B.127.0.0.1 C.175.146.87.175 D.202.96.0.255 2. HTTP的默认端号是()。 A.80 B.8080 C.70 D.21 3.如果网页(),该网页是动态的。 A.有GIF动画图片动来动去 B.有动画广告飞来飞去 C.能看影视 D.是动态实时生成的 4.以下选项中()是不正确的URL。 A.https://www.doczj.com/doc/9c7541598.html, https://www.doczj.com/doc/9c7541598.html, C.http://localhost:8080/bookshop/index.jsp D.ftp://ftp.link/down/search.jsp 5.客户发出请求、服务器端响应请求过程中,说法()是正确的。 A.在客户发起请求时,DNS域名解析地址前,浏览器与服务器建立连接 B.客户在浏览器上看到结果后,释放浏览器与服务器连接 C.客户端直接调用数据库数据 D.Web服务器把结果页面发送给浏览器后,浏览器与服务器断开连接 6.以下说法()是正确的。A.因特网和万维网是一回事B.万维网是网络的网络 C.万维网是一个运行在Internet上的全球性、分布式信息发布系统 D.万维网是覆盖全球的网络 1.简述名词:计算机网络、互联网和Inernet。 1.为使页面具有红背景色()语句正确。 A.
B. C. D. 2.以下代码段显示()。Web技术 | Web技术 |
1、请编写一个简单的测试https://www.doczj.com/doc/9c7541598.html,环境能否正确运行的https://www.doczj.com/doc/9c7541598.html,程序。该程序应如何进行部署? ①要求操作系统为Win2000SP4以上,或WinXP,或Win2003 ②安装IIS5.0或以上(在IE地址栏内输入http://localhost,有页面出现,说明IIS安装成功)。 ③安装.NET FrameWork 2.0. ④建立一个test.aspx文件,内容如下: <%@Page Language=”C#”%> <% Response.Write(“我的第一个https://www.doczj.com/doc/9c7541598.html,程序”); %> ⑤将该文件复制到c:\intepub\wwwroot文件夹下(或将test.aspx文件所在文件夹配置成虚拟目录) ⑥在IE地址栏内输入http://localhost/test.aspx(或http://localhost/Test/Test.aspx 浏览器内出现下列文字,说明https://www.doczj.com/doc/9c7541598.html,安装成功。 我的第一个https://www.doczj.com/doc/9c7541598.html,程序 2、CSS的选择器和样式表的类型。 样式表类型1、内联式样式表2、嵌入式样式表3、处部样式表4、输入样式表 CSS的选择器分为两大类:基本选择题和扩展选择器。 基本选择器: 1)标签选择器:选择器的名字代表html页面上的标签 2)类选择器:规定用圆点.来定义 3)ID选择器:规定用#来定义 4)通用选择器:用*定义,将匹配任何标签 扩展选择器: 1)组合选择器:定义的时候用逗号隔开 2)关联选择器(后代选择器):定义的时候用空格隔开 3)伪类选择器(静态伪类:只能用于超链接,动态伪类:针对所有标签都适用) 3、JavaScript的浏览器对象和功能。 窗口(windows)对象:实现对话框的控制;处理框架与框架之间的关系;是其他对象的顶级对象,通过对windows的子对象进行操作,可以实现更多的动态效果文档(document)对象:代表浏览器窗口中的文档,是窗口对象的子对象,可以访问html
Web考试复习资料 第一章 1.填空题 (1).NET Framework主要包括公共语言运行库(CLR) 和类库 (2)ASP.NET网站在编译时,首先将语言代码编译成 MSIL,微软中间语言 (3)一台IIS Web服务器IP地址为211.78.60.19,网站端口为8000,则要访问Web 应用程序User中Default.aspx的URL为 1.78.60.19:8000/Default.aspx (4)可以通过复制网站同步网站上的一个文件 3.选择题 (1)VSEW 2012不支持(A) A.Java B.JavaScript C.LINQ D.Microsoft Ajax (2)下面(D)网站在建立时要求安装Microsoft FrontPage服务器扩展 A.文件系统 B.本地IIS C.FTP站点 D.远程站点 (3)以下选项不属于编程语言的是(A) A.ASP.NET B.Visual Basic C.Visual C# D.Visual C++ 4.简答题 (1)一个学校有多个分院,每个分院有各自的网站,如果提供一台WEB服务器,如何设置?答:每个分院设置各自的虚拟目录。虚拟目录是服务器硬盘上通常不再主目录下的文件夹的一个好记名称(别名),使用别名可以发布多个文件夹下的内容以供所有用户访问,并能单独控制每个虚拟目录的读写权限。 (6)静态网页和动态网页的区别? 答:静态页面是不能随时改动的,静态是一次性写好放在服务器上进行浏览的,如果想改动,必须在页面上修改,然后再上传服务器覆盖原来的页面,这样才能更新信息,比较麻烦,使用者不能随时修改。 动态页面是可以随时改变内容的,有前后台之分,管理员可以在后台随时更新网站的内容,前台页面的内容也会随之更新 第二章 1.填空题 (1)VSEW 2012默认建立的XHTML文件类型是 XHTML5 (2)邮箱的元素是 (6)在单文件页模型中,C#代码必须包含于
《Web开发技术》复习题 一、选择题 15、application对象能在(C)间共享。 A、某个访问者所访问的当前页面 B、某个访问者所访问的网站的各个页面之间 C、该服务器上的所有的访问者的所有jsp页面 D、该服务器上的所有的访问者的所有jsp页面和Java程序 16、在JSP页面中使用bean,我们必须使用JSP动作标签( A )。 A、useBean B、useBeans C、Beans D、JavaBean 17、当useBean标签中的scope属性取值page时,该beans的有效范围是( B )。 A、当前客户 B、当前页面 C、当前服务器 D、所有客户 18、当useBean标签中的scope属性取值( C )时,该beans的有效范围是访问者的会话期间。 A、request B、page C、session D、application 19、JSP程序段的基本语法是( C )。 A、VBScript语言语法 B、JavaScript语言语法 C、Java语法语言 D、C语言语法 20、下列哪一种不是JSP页面的组成元素.( D ) A、JSP标签,如指令标签 B、普通的HTML标记符 C、Java表达式 D、C语言程序 21、在一个JSP页面中不可以出现的注释形式为( B ) A、 B、@rem 注释内容 C、// 注释内容
D、<%-- 注释内容 --%> 22、request.getRemoteAddr()方法的作用是:( B ) A、获取客户提交的信息 B、获取客户的IP C、获取客户机的名称 D、获取服务器的IP 23、当( C )时,JSP引擎产生一个session对象。 A、web应用服务器启动时 B、当web应用服务器启动后,第一个客户来访时 C、当每个客户首次访问服务器上的一个JSP页面时 D、当每个客户首次访问服务器上的一个JSP或HTML页面时 24、当( A )时,JSP引擎产生一个application对象。 A、web应用服务器启动后 B、当web应用服务器启动后,第一个客户来访时 C、当每个客户首次访问服务器上的一个JSP页面时 D、当每个客户首次访问服务器上的一个JSP或HTML页面时 25、JDBC是Java数据库连接API,以下说法中哪些是不正确的?( C ) A、与一个数据库建立连接 B、向数据库发送SQL语句 C、建立ODBC数据源 D、处理数据库返回的结果 26、查询数据库得到的结果集中,游标最初定位在( A )。 A、第一行 B、第一行的前面 C、最后一行 D、最后一行的后面 27、以下关于JavaBean的说法中,错误的是( B )。 A、JavaBean是基于JAVA语言的 B、JavaBean是JSP的内置对象之一 C、JavaBean是一种Java类 D、JavaBean是一个可重复使用的软件组件 28、在编译Servlet或Javabean时,我们使用( A)命令。 A、Javac B、Java C、Servlet D、以上三种都不对
第6章Web窗体和基本控件 第六章参考解答 1.什么是HTML服务器控件?它与HTML控件的主要区别是什么? 【解答】 通过在元素内添加id和runat="server"特性,将HTML元素转换为HTML服务器控件,然后在服务器端利用C#对其进行操作,这些元素称为HTML服务器控件。HTML服务器控件与HTML 控件的主要区别是前者在服务器端实现相应的功能,后者在客户端实现。 2.简述在服务端动态控制Web服务器控件样式的方法。 【解答】 通过Attributes和Style可以动态控制Web服务器控件样式。如https://www.doczj.com/doc/9c7541598.html,bel2.Attributes["Style"] = "color:green; border:solid 1px red;"; 和Anchor1.Style["color"] = "red"; 3. https://www.doczj.com/doc/9c7541598.html,状态管理有哪些方式? 【解答】 https://www.doczj.com/doc/9c7541598.html,状态管理主要有基于客户端的状态管理和基于服务器的状态管理。基于客户端的状态管理选项只在页中或客户端计算机上存储信息。对于这些选项,在各往返行程间不会在服务器上维护任何信息。具体包括ViewState对象和Cookie对象。基于服务器的状态管理选项只在服务器上存储信息。具体包括Session对象和Application对象。 4.简要说明https://www.doczj.com/doc/9c7541598.html,使用缓存机制的好处。 【解答】 https://www.doczj.com/doc/9c7541598.html,的缓存机制可以使WEB应用程序将频繁访问的数据,以及需要耗费大量系统资源及时间来创建的数据在首次运行程序时存储在内存中。当页面下次访问时,程序不需要重新耗费资源创建数据,直接从内存中取出数据即可,从而大大提高了程序整体性能。 5. 假如有一个名为Site1.Master的母版页,其中包含一个TextBox1控件,在内容页中如何将其Text属性设置为“123456”,请写出实现代码。 【解答】 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 {
1.web结构也称为浏览器/服务器(B/S)结构,使用超文本传输协议(HTTP)传输数据。 2.B/S(即浏览器/服务器结构)结构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。 3.C/S(客户/服务器结构)结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快,其缺点主要有以下几个: (1)只适用于局域网。随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种远程访问方式需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。 (2)客户端需要安装专门的客户端软件。首先是涉及安装的工作量,其次是任何一台计算机出问题(如病毒、硬件损坏)都需要进行安装或维护。特别是很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有系统软件升级时,每一台客户急需要重新安装,其维护和升级成本非常高。 (3)对客户端的操作系统一般也会有限制。可能适应于Windows XP,但不能用于Windows8/Vista,或者不适用于Microsoft公司新的操作系统等,更不用说Linux、Unix等。 4.B/S结构与C/S结构比较:可以从以下六个方面比较: (1)数据安全性比较:C/S需要在各地安装多个服务器,而B/S数据集中存放在总部的数据库服务器,B/S相对安全一点。 (2)数据一致性比较:C/S结构中各服务器不是一个时点上的数据,数据永远无法一致,不能用于决策,对于B/S结构的软件来讲,数据集中存放,客户端发生的每一笔业务单据都直接进入中央数据库,不存在数据一致性问题。 (3)数据实时性比较:在集团级应用里,C/S结构不可能随时随地看到当前业务发生的情况,看到的都是事后数据;而B/S结构不同,它可以实时看到当前发生的所有业务,方便快速决策,避免了企业损失、 (4)数据溯源性比较:由于B/S结构的数据是集中存放的,总公司可以直接追溯到各级分支机构的原始业务单,结果可追溯,而C/S结构的软件则不同,它的结果无法追溯。 (5)服务响应及时性比较:C/S结构的软件比较分布广,分散面大,响应时间长,而B/S结构的软件较集中,能快速响应系统要求。 (6)网络应用限制比较:C/S结构的软件仅适用于局域网内部用户或宽带用户。而B/S结构软件可以适用于任何网络结构,特别适于宽带不能到达的地方。 5.web系统的三层结构: (1)数据访问层:实现对数据的访问功能,如增加、删除、修改和查询数据。(2)业务逻辑层:实现业务的具体逻辑功能,如学生入学、退学和成绩管理等。(3)页面显示层:将业务功能在浏览器中显现出来,如分页显示学生信息等。总原则是:每一层都完成相对独立的系统功能。 6.超文本标记语言(HTML)是为网页创建和其他可在网页浏览中可看到的信息设计的一种标记语言。
( )1. VBScript程序语言是Microsoft公司将VB(Visual Basic)程序语言加以简化,所衍生出来的程序语言。 ( )2. HTML也有所谓如“IF…Then…”的判断语句。 ( )3. VBScript的注释符号为“//”。 ( )4. VBScript的程序代码很难保密,容易被偷窥。 ( )5. 常量是一种不会改变的数,定义常量要使用“Dim常量名称”。 ( )6. 运算符“+”也可以用来连接字符串。 ( )7. 运算符“Mod”可以算出除法结果中的整数。 ( )8. VBScript中次方的算法是使用“^”。 ( )9. “30 < 1 OR 5 > 4”计算出的结果“False”。 ( )10. 定义数组时要用“Const数组名”。 二、操作题 1. 设计一个VBScript程序,能计算出边长为5厘米的正方形面积,并显示出计算结果,如图2-8所示。<\Ch02\正方形面积.htm> 2. 设计一个VBScript程序,能比较边长为5厘米的正方形和半径为5厘米的圆形哪个面积比较大,如果圆形比较大,就显示“True”,若正方形比较大,就显示“False”,如图2-9所示。<\Ch02\比较大小.htm> 3. 设计一个VBScript程序,计算出边长为5厘米的正方形和半径为5厘米的圆形的面积差,并显示出来,如图2-10所示。<\Ch02\面积差.htm> 参考答案: 一、是非题 T F F T F T F T F F 二、操作题 1.