Introduction to Server Controls
尽管可以通过混合简单的html语句加上服务器端代码来实现功能,但这样会使页面变得混乱和复杂,难以维护。相反,asp.net服务器空间只存在与服务器端,当浏览器发来请求或者发来postback,asp.net runtime负责解释和处理这些控件,然后服务器将解释好的纯html传回给客户。
定义:<asp:TypeOfControl ID=”ControlName” Runat=”Server” />
ID必须唯一,Runat表明此控件需要在服务器端被处理。
A Closer Look at ASP.NET Server Controls
Defining Controls in Your Pages
可以直接从工具栏中拖控件到设计模式的面板中或者甚至直接到需要的页面代码的位置。在页面代码中可以直接去属性窗口中修改属性的值。
Common Properties for All Controls
visible属性:如果为负,则服务器不会把该控件的html代码发回到客户端。
Types of Controls
Standard Controls
Simple Controls
Button, Label, Hyperlink, Radio Button和 Checkbox.
List Controls
List Box, Dropdown List, Checkbox List, Radio Button List, 和Bulleted List.
AutoPostBack属性:一旦用户选择了一个新的菜单项,浏览器就会自动向服务器发送postback。
Container Controls
Panel支持设计的模式
PlaceHolder不支持设计的模式
MultiView可以包含多个<asp:View>
Wizard可以将一个长篇的文章分页,然后提供向前,向后等等功能。
Other Standard Controls
LinkButton and ImageButton
Image and ImageMap
Calendar
FileUpload
Literal, Localize, and Substitute
AdRotator
HiddenField
XML
Table
HTML Controls
html控件本身是客户端控件,但通过加入attribut Runat=”Server”使这些控件可以在服务器端被处理,加入程序控制。但是html控件不支持设计的模式。
How to Choose between Standard and HTML Controls
服务器端控件需要更多的时间来处理,是程序更复杂。
Data Controls
Validation Controls
Navigation Controls
Login Controls
Ajax Extensions
WebParts
The ASP.NET State Engine
What Is State and Why Is It Important?
State field可以在服务器端一直记录着在每次postback时页面中各个控件的即时value。使得即使刷新页面或者postback后重新显示页面,各个控件也至少能显示postback前的值(或者postback时根据程序逻辑发生改变得到的值),不至于使得控件被恢复到了初始值。
流程如下:
1. 第一次打开浏览器并输入页面地址向服务器提出页面的请求。
2. 浏览器将请求发送到服务器。
3. Asp.net在硬盘中找到页面文件,将之处理好后把html代码发回浏览器。这时所有控件的值都被设置为初始值。
4. 页面在浏览器中显示后,点击按钮set date,产生一个postback。
5. 在服务器端页面被重建,各个控件也被重置为初始值。由于这是第一次postback,所有控件的值都是初始值,所以viewstate中什么都没有记录,所以不用去viewstate中去查找替换。
6. Runtime继续处理请求,处理btnSetDate_Click,将label的text属性的值改成了当前的时间。这时runtime会将这个变化了的值存到viewstate中!
7. 等到下一次postback时(假设这回什么都没改),在服务器端页面还是会被重建,各个控件也被重置为初始值。然后runtime开始检查viewstate并将label的text属性的默认值替换为viewstate中存储的值。然后将页面发回浏览器。这回就可以看到,label上一次的text在经过了postback后,还是被保留着。
8. 最后,假如将label的enableViewState置为false,runtime检查viewstate时就会忽略label而直接将它的原始值发回给浏览器。
Not All Controls Rely on ViewState
TextBox, CheckBox, RadioButton 和 DropDownList
所以为了避免两次存储viewstate,可以将他们的enableViewState置为false以提高速度。
A Note About ViewState and Performance
l At the web site level (web.config)不推荐
<pages
enableViewState=”false”>
...
</pages>
l At the page level
<%@ Page
Language=”VB” AutoEventWireup=”false” CodeFile=”State.aspx.vb” Inherits=”Demos_State” EnableViewState=”false” %>
就算控件是true也没用了,除了那些不受viewstate影响的控件。
l At the control level(推荐)
最好一上来所有控件都置为false,然后再根据具体需要改回true。