5章  HTML控件和Web服务器控件
在ASP.NET中,一切都是对象。Web页面就是一个对象的容器。那么,这个容器可以装些什么东西呢?这一节我们学习HTML控件和Web服务器端控件,叫做Control。这是Web页面能够容纳的对象之一。
Control是一个可重用的组件或者对象,这个组件不但有自己的外观,还有自己的数据和方法,大部分组件还可以响应事件。通过微软的集成开发环境(Visual Studio.NET 2003),可以简单地把一个Control拖放到一个Form中。
为什么会有HTML控件和Web服务器端控件之分呢?这是因为一些Control是在服务器端存在的。服务器端控件有自己的外观,在客户端浏览器中,Server Control的外观由HTML代码来表现。Server Control会在初始化时,根据客户的浏览器版本,自动生成适合浏览器的HTML代码。
5.1  HTML控件
HTML控件由HTML标记衍生而来,HTML控件在外形上与普通的HTML标记很相似,几乎所
有的HTML标记加上runat="Server"这个Server控件的标识属性后,都可以变成HTML控件。它们之间最大的区别就是HTML可以通过服务器端的代码来控制。下面以一个超级链接控件(HtmlAnchor)为例来看一下。
可以在WebForm1.aspx上定义一个HtmlAnchor控件:
<a href= "www.microsoft/china" Target="_blank" runat="server">欢迎来到微软中国</a>
上面的这段代码就是定义的一个HTML控件,它与普通的<a></a>标记相比,区别仅仅是添加了runat="server"属性。
5.1.1  HTML控件的优点
ASP允许我们在服务器上使用组件,这些组件能够产生反馈给用户的页面。ASP.NET通过控件扩展了这一概念。将任何HTML元素转换为服务器控件所需要的只是一个附加的属性:runat="Server"。ASP.NET将在服务器上处理这些元素,并可以产生适合各种特定用户的输出。另外,我们可以通过HTML<FORM>和表单控制元素做其他事情,如编写代码处
理进出服务器期间的状态。这使得编写程序不再那么枯燥乏味,同时也提高了工作效率。
总结起来,HTML控件主要优点有以下两个方面:
1) HTML控件将HTML标注对象化,可以让程序直接控制并设定其属性,这样一来程序代码和HTML控件分开,程序的架构就不会显得杂乱无章而不好管理。
2) HTML控件对事件的支持,以事件触发方式来编写程序,使得网页编程变得更加简单。
[例5.1]  利用程序直接控制并设定HTML控件属性。首先定义一个普通的HTML标记:
    <a></a>
这个标记不会产生任何有意义的显示结果。同样也建立一个不会有任何显示结果的HtmlAnchor控件:
    <a ID="anchor1" runat="server"></a>
这里需要注意:HTML控件比HTML标注多了ID以及runat这两种属性。ID属性表示程序是
以本属性来控制对象的,所以任何对象的名称不可重复,不管它们是否为同一种类。而runat属性表示这个对象是在Server端执行,所有的HTML控件都必须加上这个属性设定值;倘若该对象在程序执行时不需要被程控,则可以忽略ID属性的设定。
初始化时,两者处于同一状态,均不会输入任何显示结果。此时,普通的anchor标记是没有办法再让自身输出“可视”的显示,它在程序中作用为零。而HtmlAnchor控件则不同,它的作用并没有受到丝毫的影响。程序依然可以在Page_load事件中设置它的各种属性.它依然可以展示它所有的功能。其HTML代码如下所示:
    <%@ Page language="c#" Codebehind="HtmlAnchor.aspx.cs" AutoEventWireup="true"
        Inherits="WebApplication1.WebForm1" %>
            <Script language="C#" runat="server">
            public void Page_Load(object sender, System.EventArgs e)
            {
                anchor1.HRef="www.microsoft/china";
              anchor1.Target="_blank";
              anchor1.InnerHtml="欢迎来到微软中国";
            }
        </Script>
    <HTML>
        <body>
            <form id="Form1" method="post" runat="server">
                <a></a>
                <a id="anchor1" runat="server"></a>
            </form>
        </body>
    </HTML>
运行结果如图5.1所示。
我们通过查看这个页面的源文件可以发现在客户端,HtmlAnchor控件生成的还是普通的HTML标记。
<a href="http//www.microsoft/china" id="anchor1" target="_blank">欢迎来到微软中国</a>
5.1  HtmlAnchor控件在Page_load事件中的运行结果
这说明,HtmlAnchor控件是在服务器上执行后产生的标准HTML代码,然后再发送至客户端。
了解HTML控件可以直接被程序所控制后,再来看看HTML控件对事件的支持。
[例5.2]  以Button的OnServerClick为例:<Button>标记在服务器上执行显示与标记<input Type="Button">的显示相同,两者都生成标准的Button按钮。但是<Button>比<input Type="Button">标记的功能强大,它能够通过Javascript代码来控制Button按钮的显示。现在又在又在<Button>标记中添加了id与runat="server"属性使之成为Html控件,于是它的属性使由服务器来操纵了。注意,HtmlButton控件的触发事件不再是OnClick,而应当是OnServerClick。从字面上能看出,OnServerClick表示事件是发生在服务器端。
    <%@ Page language="c#" Codebehind="HtmlButton.aspx.cs" AutoEventWireup="false"
        Inherits="WebApplication1.WebForm2" %>
    <HTML>
        <HEAD>
            <title>HtmlButton示例</title>
            <Script language="C#" runat="server">
            public void button_click(object sender, EventArgs e)
            {
                    //定向到www.microsoft/china地址
                Response.Redirect("www.microsoft/china");
            }
            </Sdript>
        </HEAD>
            <body MS_POSITIONING="GridLayout">
                <form id="Form1" method="post" runat="server">
                <button id="button1" runat=server onserverclick="button_click" type
                    =button>欢迎来到微软中国
                </button>
            </form>
        </body>
    </HTML>
运行结果图5.2所示。
图5.2  HtmlButton控件的运行界面
当单击Button按钮时,将会触发OnServerClick事件,并且执行Button_Click事件处理,将页面转移至http//www.microsoft/china
这里要注意:
1) Button_Click这个事件程序中宣告了对象型态的变量Sender及事件参数e,分别表示是由哪个对象发出事件,以及发生事件时的相关信息;每个事件程序中都要加入(Object Sender, EventArgs e)这两个参数宣告。
2) Button类控件必须放在HtmlForm控件(<form id="Form1" runat="server" ethod="Post"> </form>)之间,否则程序运行时会报错。如果没有这个HtmlForm控件,ASPNet执行时不会产生<form>,标记,那么程序不会产生请求过程。
5.1.2  HTMLhtml代码转链接控件架构
当ASP.NET网页执行时,会检查标注有无Runat属性。如果标注没有设定这个属性,那么该标注就会被视为字符串,并被送到字符串流等待送到客户端的浏览器进行解译。如果标注有设定runat="Server"属性,那么就会依照该标注所对应的HTML控件来产生对象,所以ASP.NET对象的产生是由runat属性值所决定的。当程序在执行时解析到有指定runat="Server"属性的标注时,Page对象会将该控件从.NET共享类别库加载,并列入控制架构中,表示这个控件可以被程序所控制。等到程序执行完毕后,再将HTML控件的执行结果转换成HTML标注,然后送到字符串流和一般标注一起下载至客户端的浏览器进行解译。
所有的Html控件位于System.Web.UI.HtmlControls命名空间中,是从HtmlControl基类中直接或间接派生出来的。图5.3说明了HTML控件的类层次结构。
表5.1中列出了HTML控件以及对应的HTML标记。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。