服务器控件简介 以一个文本框控件为例: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
控件代码有如下特点:
- 控件名称前面都带有asp:前缀
- ID特性用来唯一地标识页面的一个控件
- 强制性的runat特性用来指出该控件存活在服务器上。
可以通过工具|选项|文本编辑器|HTML|格式设置|标记专用选项来控制每个标记的默认闭合行为。
试一试:使用服务器控件
- 创建一个新的Web窗体,命名为ControlsDemo.aspx
- 在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>
- 为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
- 保存所有修改,并在浏览器中打开页面。
- 查看页面的源代码。
- 返回页面,输入你的名字,按提交,再次查看源代码。
工作原理
- 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
试一试 使用列表控件
- 创建一个名为ListControls.aspx的Web窗体
- 为页面添加一个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>
- 为按钮添加单击事件。
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
- 保存对页面的所有修改,然后在浏览器中请求它。
工作原理
<asp:ListItem>元素有一个Value特性,如果省略,Value就等于该元素的html文本值。
容器控件
如Panel,PlaceHolder, MultiView,Wizard
Panel控件呈现为<div>标记,可以轻松地访问所有包含的控件和其他内容。
试一试 使用Panel控件
- 新建一个名为Containers.aspx的Web窗体。
- 在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>
- 为checkbox添加checkedchanged事件处理程序。
Protected Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
Panel1.Visible = CheckBox1.Checked
End Sub
- 保存修改,在浏览器中查看。查看页面的html文件,根据id=’Panel1’可以知道panel显示为div。
工作原理
Panel控件的Visible属性为False,意味着控件在服务器上不可见。
试一试 用向导创建容易使用的表单
- 创建名为Wizard.aspx的Web窗体。
- 在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>
- 为向导控件的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
- 保存修改,在浏览器中查看。
工作原理
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。
|
请发表评论