服务器控件简介

以一个文本框控件为例:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

控件代码有如下特点:

  • 控件名称前面都带有asp:前缀
  • ID特性用来唯一地标识页面的一个控件
  • 强制性的runat特性用来指出该控件存活在服务器上。

可以通过工具|选项|文本编辑器|HTML|格式设置|标记专用选项来控制每个标记的默认闭合行为。

试一试:使用服务器控件

  1. 创建一个新的Web窗体,命名为ControlsDemo.aspx
  2. 在form的div块中,添加一个TextBox、Button和Label控件,并设置其特性。最终代码如下:
        <div>
        Your name
            <asp:TextBox ID="YourName" runat="server"></asp:TextBox>
            <asp:Button ID="SubmitButton" runat="server" Text="Submit Information" />
            <br />
            <asp:Label ID="Label1" runat="server"></asp:Label>
        
        </div>
    
  3. 为Button控件添加代码
        Protected Sub SubmitButton_Click(sender As Object, e As EventArgs) Handles SubmitButton.Click
            Label1.Text = String.Format("Your name is {0}", YourName.Text)
        End Sub
    
  4. 保存所有修改,并在浏览器中打开页面。
  5. 查看页面的源代码。
  6. 返回页面,输入你的名字,按提交,再次查看源代码。

工作原理

  • asp.net服务器控件存活在服务器上的aspx页面中,在该页面中,控件可以由asp.net运行库处理。
  • 每个服务器控件都有相对应的html表示。如本例中,Label控件对应span元素,文本框控件对应<input type=”text”>,而按钮最终显示为<input type=”submit”>
  • 当单击按钮时,控件引发一个回发,将页面中控件的信息发送给服务器,然后服务器再次加载页面,并执行按钮的单击事件处理程序。

ASP.NET服务器控件详解

在页面中定义控件

可以采用多种方法添加控件到页面:

  • 拖动控件到设计视图
  • 在源视图调整标记的位置
  • 直接在源视图输入标记
  • 利用属性面板修改控件属性

所有控件的共同属性

类别 名称 说明
杂项 id 在页面中唯一的标识控件
- runat 总是为"server”
布局 height  
  width  
行为 enabled  
  visible  
  tooltip 定义工具提示
  clientidmode  
可访问性 accesskey 定义键盘快捷键
  tabindex 定义切换顺序
外观 backcolor  
  forecolor  
  bordercolor  
  borderstyle  
  borderwidth  
  cssclass 对应于html class特性

控件的类型

标准控件

简单控件

包括textbox, button, label, hyperlink, radiobutton, checkbox

列表控件

包括listbox, dropdownlist, checkboxlist, radiobuttonlist, bulletedlist

试一试 使用列表控件

  1. 创建一个名为ListControls.aspx的Web窗体
  2. 为页面添加一个DropDownList, 一个CheckBoxList,一个按钮和一个label控件。并在label前添加适当的空间。
        <div>
            <asp:DropDownList ID="DropDownList1" runat="server">
                <asp:ListItem>C#</asp:ListItem>
                <asp:ListItem>Visual Basic</asp:ListItem>
                <asp:ListItem>CSS</asp:ListItem>
            </asp:DropDownList>
            <asp:CheckBoxList ID="CheckBoxList1" runat="server">
                <asp:ListItem>C#</asp:ListItem>
                <asp:ListItem>Visual Basic</asp:ListItem>
                <asp:ListItem>CSS</asp:ListItem>
            </asp:CheckBoxList>
            <asp:Button ID="Button1" runat="server" Text="Button" />
            <br />
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </div>
    
  3. 为按钮添加单击事件。
        Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Label1.Text = "In the DDL you selected " & DropDownList1.SelectedValue & "<br />"
            For Each item As ListItem In CheckBoxList1.Items
                If item.Selected Then
                    Label1.Text &= "In the CBL you selected " & item.Value & "<br />"
                End If
            Next
        End Sub
    
  4. 保存对页面的所有修改,然后在浏览器中请求它。

工作原理

<asp:ListItem>元素有一个Value特性,如果省略,Value就等于该元素的html文本值。

容器控件

如Panel,PlaceHolder, MultiView,Wizard

Panel控件呈现为<div>标记,可以轻松地访问所有包含的控件和其他内容。

试一试 使用Panel控件

  1. 新建一个名为Containers.aspx的Web窗体。
  2. 在form中的div中添加一个checkbox和一个panel控件。最终代码如下:
        <div>
            <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" Text="Show Panel" />
            <asp:Panel ID="Panel1" runat="server" Visible="False">
                I am visible now.
            </asp:Panel>
        </div>
    
  3. 为checkbox添加checkedchanged事件处理程序。
        Protected Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
            Panel1.Visible = CheckBox1.Checked
        End Sub
    
  4. 保存修改,在浏览器中查看。查看页面的html文件,根据id=’Panel1’可以知道panel显示为div。

工作原理

Panel控件的Visible属性为False,意味着控件在服务器上不可见。

试一试 用向导创建容易使用的表单

  1. 创建名为Wizard.aspx的Web窗体。
  2. 在form中的div中添加Wizard控件。
            <asp:Wizard ID="Wizard1" runat="server" ActiveStepIndex="0" Width="500px">
                <WizardSteps>
                    <asp:WizardStep runat="server" Title="About You">
                        <asp:Label ID="Label1" runat="server" Text="Type your name"></asp:Label>
                        <asp:TextBox ID="YourName" runat="server"></asp:TextBox>
                    </asp:WizardStep>
                    <asp:WizardStep runat="server" Title="Favorite Language" StepType="Finish">
                        <asp:DropDownList ID="FavoriteLanguage" runat="server">
                            <asp:ListItem>C#</asp:ListItem>
                            <asp:ListItem>Visual Basic</asp:ListItem>
                            <asp:ListItem>CSS</asp:ListItem>
                        </asp:DropDownList>
                    </asp:WizardStep>
                    <asp:WizardStep runat="server" Title="Ready" StepType="Complete">
                        <asp:Label ID="Result" runat="server" Text="Label"></asp:Label>
                    </asp:WizardStep>
                </WizardSteps>
            </asp:Wizard>
    
  3. 为向导控件的finishButtonClick添加事件处理函数。
        Protected Sub Wizard1_FinishButtonClick(sender As Object, e As WizardNavigationEventArgs) Handles Wizard1.FinishButtonClick
            Result.Text = "Your name is " & YourName.Text
            Result.Text &= "<br />Your favorite language is " & FavoriteLanguage.SelectedValue
        End Sub
    
  4. 保存修改,在浏览器中查看。

工作原理

Wizard控件可以将用户的输入依据逻辑在独立的向导页面上呈现各个部分。然后,Wizard控件会通过自动创建Next,Previous和Finish按钮来处理所有导航问题。这里需要设置

  • asp:WizardStep的StepType属性,倒数第二步为Finish,最后一步为Complete。其他可以设为Auto。
  • 将asp:Wizard的ActiveStepIndex设为0,确保向导先启动第一页。
  • 当用户单击向导最后一步的finish按钮会激发Wizard控件的FinishButtonClick事件。

其他标准控件

html控件

数据控件

有效性验证控件

导航控件

登录控件

Ajax扩展

WebParts

动态数据

ASP.NET状态引擎

状态引擎的定义及其重要性

http协议是无状态的,Web服务器不会跟踪从特定浏览器中发出的请求,Web服务器不记忆以前请求的页面。

状态引擎的工作原理

状态引擎可以存储很多控件的状态。

试一试 分析ASP.NET状态引擎

(略)

工作原理

form元素的用途:它用来封装一些表单控件,这些控件的值会被一起提交回服务器。

表单提交方式有两种:

  • Post:所有来自表单的数据都被添加到请求的主体中,然后发送给服务器。
  • Get:所有的数据都被附加到请求的实际地址后面。

默认情况下,表单使用Post方法向服务器发送数据,并且每个Web窗体只有一个form元素。

默认情况下,Web窗体提交回给自己,也就是State.aspx页面的form元素的action属性为State.aspx。

隐藏的__VIEWSTATE字段,是服务器用来跟踪表单控件当前状态的。

当ASP.NET运行时加载ASP.NET页面时,会用该页面的相关信息填充这个隐藏字段。

并非所有控件都依赖于view state

有很多控件自己维持自己的状态,这些控件包括TextBox,checkbox,radiobutton,dropdowlist

关于view state和性能的一个注意点

为了性能,可以关闭不需要的view state功能:

  • 在web站点级别 在web.config中,将<system.web>下<pages>的enableViewState特性设置为false
        <pages controlRenderingCompatibilityVersion="4.5" enableViewState="true"/>    
      </system.web>
    
  • 在页面级别 在每个页面上方可以发现页面指令,在页面指令中,可以将EnableViewState设置为false
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="State.aspx.vb" Inherits="State" EnableViewState="True" %>
    
  • 在控件级别 各控件允许分别设置EnableViewState设置为false

有些控件如数据驱动控件的enableViewState可以考虑为false。