Introduction to Server Controls

尽管可以通过混合简单的html语句加上服务器端代码来实现功能,但这样会使页面变得混乱和复杂,难以维护。相反,asp.net服务器空间只存在与服务器端,当浏览器发来请求或者发来postbackasp.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,将labeltext属性的值改成了当前的时间。这时runtime会将这个变化了的值存到viewstate中!

7.         等到下一次postback时(假设这回什么都没改),在服务器端页面还是会被重建,各个控件也被重置为初始值。然后runtime开始检查viewstate并将labeltext属性的默认值替换为viewstate中存储的值。然后将页面发回浏览器。这回就可以看到,label上一次的text在经过了postback后,还是被保留着。

8.         最后,假如将labelenableViewState置为falseruntime检查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.vbInherits=Demos_StateEnableViewState=”false” %>

就算控件是true也没用了,除了那些不受viewstate影响的控件。

l  At the control level(推荐)

最好一上来所有控件都置为false,然后再根据具体需要改回true

 

Posted on 2009-08-08 10:19  kakalee  阅读(206)  评论(0编辑  收藏  举报