当前位置:K88软件开发文章中心编程语言.NET.NET02 → 文章内容

细细品味ASP.NET

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 0:48:53

个例子进行扩展,可以去掉 Response.Write,然后用一个基于服务器的控件来代替它,比如下面的表2代码:

表2 使用基于服务器的控件

<html>
<script language=“vb” runat=“server”>
Sub SubmitButton_Click(Source As Object, E As EventArgs)
YouEntered.Text = ÒYou entered Ò & txtName.text
End Sub
</script>
<body>
<form method=“post” runat=“server”>
Name: <asp:textbox id=“txtName” runat=“server” /><br>
<asp:Button text=“Enter”
OnClick=“SubmitButton_Click” runat=“server” />
<br>
<asp:label id=“YouEntered” runat=“server”></span>
</form>
</body>
</html>

这个代码运行相当好,很象一个传统的客户或Visual Basic表单,代码也直观多了。你可以用服务器控件来连接事件过程和基于服务器的代码。这些基于服务器的控件向浏览器发送纯 HTML内容,其中不再含有客户端脚本。实际上,这其中一个重要的设计目的就是要坚持使用固有的 HTML 3.2元素代码以提供最大可能的浏览器兼容性。比如说,表2中的代码生成了以下HTML:

<html>
<body>
<FORM name=“HtmlForm2" method=“post” action=“Test.aspx” id=“HtmlForm2">
<INPUT type=“hidden” name=“__VIEWSTATE” value=“a0z664351470__x”>
Name: <input name=“txtName” type=“text” id=“txtName”><br>
<input type=“submit” name=“Button5" value=“Enter”>
<br>
<span id=“lblYouEntered”></span>
</FORM>
</body>
</html>

生成的代码是符合 HTML 3.2标准的。它执行一个标准投递,将用户输入发送回同一个文件。这里没有对服务器状态进行维护,也没有客户端脚本对状态进行维护。隐含的域执行对控件状态的维护,这意味着在页面的“提交-返回”之间,控件能自动恢复状态,而不需要任何编程干预。虽然 ASP.NET Web控件的默认输出是符合HTML 3.2标准的内容,但是对于更高级的浏览器如Microsoft Internet Explorer 5.0,也可以输出为DHTML格式。这样你就能只使用一套服务器控件来编写页面,允许控件根据浏览器决定发送哪种类型的输出,从而允许你将发送 DHTML的控件和客户端脚本用到最新版本的Internet Explorer中,将纯 HTML 3.2内容发送到其它浏览器中。

页面事件

在此前我提到 ASP.NET已经被从头到脚地重写了,但是我并没有指出它是按照面向对象的思路重建的。在对象树的顶部是Page对象,即页面对象,ASP.NET的每个控件、应用程序和页面都是从这个对象中继承来的,也就是说每个页面都是页面对象的一个例示。页面的Load (装载)事件是一个非常重要的事件,如下面的表3代码所示:

表3 使用页面事件

<html>
<script language=“VB” runat=“server”>
Sub Page_Load(Source As Object, E As EventArgs)
‘ code to run when page loads
End Sub
Sub SubmitButton_Click(Source As Object, E As EventArgs)
‘ code to run when button is clicked
End Sub
Sub Page_Unload(Source As Object, E As EventArgs)
‘ code to run when page unloads
End Sub
</script>
<form runat=“server”>
<asp:Button text=“Enter” OnClick=“SubmitButton_Click” runat=“server” />
<asp:label id=“YouEntered”/>
</form>
</html>

在这里你看到了以前在Visual Basic中经常见到的同样的 Load/Unload (装载/卸载)过程。 当页面被装载时,Load事件被激活,这时所有基于服务器的控件都可用。在与用户的交互作用过程中会生成其它事件。最后,当页面被卸载时激活 Unload事件。

:2011-04-17 17:54:38

Web控件

你可能会担心,象 <asp:TextBox>这样的控件代表了一套需要你熟练运用的全新控件。不过,它们并不难学,因为它们在HTML中都有对应者。例如,对于一个很简单的文本框,在HTML 中,你是这样做的:

<input type=“text” value=“Your Name”></input>

而相应的Web 控件是这样的:

<asp:TextBox Text=“Your Name” runat=“server” />

在这两者中,你立刻就能注意到的是Web 控件通过代码“asp:”名称空间来识别,并且同在XML中一样,使用斜线来结束元素。你不是必须使用XML的格式,你也可以使用HTML格式,用一个分号来结束标记:</asp:TextBox>。但是你会发现,XML格式被用在许多代码举例中,并且代码字数也较简洁。名称空间必须要使用,它负责识别文本框TextBox 控件来自哪里。所有的标准Web控件都是 ASP名称空间的一部分。当编写自己的控件时,这一点变得很重要。

TextBox控件相对于标准的输入框好象没有多少优势,但是你应该考虑一下面的三个输入控件:

<input type=“text” ...>

<input type=“password” ...>

<textarea rows=“5" ...>

它们都是用于HTML输入的,但是并没有一致性。但是如果使用下面的,是不是更简单一些呢?

<asp:TextBox runat=“server” ...>

<asp:TextBox TextBoxMode=“Password” ...>

<asp:TextBox Rows=“5" ...>

你可以看到,一个简单控件包含了HTML中三个控件的功能,而且更易记忆、更易编码

ASP.NET携带了5大类 Web控件:

• 与HTML相对应的固有控件

• 在页面上提供数据流的列表控件

•提供更丰富的UI(用户界面)内容和功能的Rich控件

• 完成各种表单验证的确认控件

• 为 WAP设备封装WML的移动控件

固有的服务器控件与 HTML控件相同,但是更加合理了,可提供更为一致的用途。这些控件包括LinkButton(链接按钮)、ImageButton(图象按钮)、HyperLink(超级链接)、TextBox(文本框)、CheckBox(复选框)、RadioButton(单选框)、DropDownList(下拉列表)、ListBox(列表框)、Image(图象)、Label(标签)、Panel(面板)、Table(表格)、TableRow(表格行)、TableCell(表格单元)。

列表控件包括Repeater(转发器)、DataList(数据列表)和DataGrid(数据栅格)。列表控件还包括RadioButtonList(单选框列表)和 CheckBoxList(复选框列表),这样就使创建单选框和复选框的列表变得简单。

Rich控件包括Calendar(日历)和AdRotator(广告旋转)。Calendar控件为低级的浏览器输出纯HTML,为高级浏览器输出DHTML(如 Internet Explorer 5.0)。AdRotator输出图象,它有内置的旋转代码。

确认控件包括RequiredFieldValidator(请求域确认)、 Compare Validator(比较确认)、RangeValidator(范围确认)、RegularExpressionValidator(规范表达确认)、CustomValidator(顾客确认)和ValidationSummary(确认摘要)。这些控件为开发人员在表单处理中建立确认提供了简单的途径。

有关移动控件的信息现在还没有发布,但是可以肯定它们有助于构造激活WAP的Web站点。

编写新的控件

你并不一定只局限于使用这些系统提供的控件,自己编写控件也相当简单。例如,如果想要一个控件来封装两个文本框(可能是名和姓的输入域),就可以这样来编写代码:

<asp:Panel runat=“server”>

<asp:Textbox id=“txtFirstName” text=“First Name” runat=“server” />

<asp:Textbox id=“txtLastName” text=“Last Name” runat=“server” />

</asp:Panel>

可以把这个代码保存在文件 Name.aspc (注意这个新扩展名)中,并将其作为一个Web表单控件来对待。接着,就可以向 Web表单中增加以下内容:

<%@ Register TagName=“NameControl” TagPrefix=“Foo” Src=“Name.aspc” %>

<form>

<foo:NameControl runat=“Server”/>

</form>

这样你就可以很容易地创建可以再利用的控件了。这真实很美好 ;-) 你还可以直接在Visual Basic或 C#中创建控件,允许它们成为其它控件的子类,并且呈现任何它们所要求的输出。因为控件是用名称空间来识别的,因此在控件之间应该是没有冲突的。实际上,控件甚至可以使用同一个名字,只要它们在不同的名称空间中就行。你会感觉到,这使得 ASP.NET非常具有扩展性,并且使编程环境变得越来越丰富。实际上有一个很大的提供丰富控件的第三方市场。

数据捆绑控件

新的Web控件之一是数据栅格DataGrid,这是用于显示成套数据的内置支持控件。为了从SQL生成的数据中产生一个 HTML表格,你只需要创建 ADO+对象,并执行指令来获取数据以作为栅格的数据源,比如下面的表4代码:

表 4 DaveSGrid1.aspx

<%@ Import Namespace=“System.Data.SQL” %>

<html>
<script language=“VB” runat=“server”>
Sub Page_Load(Sender As Object, E As EventArgs)
Dim myCommand As SQLCommand
myCommand = New SQLCommand(Òselect * from products”,
ÒServer=localhost; D

上一页  [1] [2] [3]  下一页


细细品味ASP.NET