ASP网站制作之ASP.NET中的ViewState
对于中小型web应用来说,php有很强的竞争力,linux+apache+mysql+php(lamp)的组合几乎可以胜任绝大多数网站的解决方案,对于大型应用来讲,对于系统架构要求更高,需要有成熟的框架支持,jsp的struts是个不错的框架,国内介绍它的资料也非常多,应用逐渐广泛起来。asp就不用说了,asp.netASP.NET中的ViewStateViewState是ASP.NET顶用来保留WEB控件回传时形态值一种机制。在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个埋没的属性_VIEWSTATE。_VIEWSTATE中寄存了一切控件在ViewState中的形态值。
ViewState是类Control中的一个域,其他一切控件经由过程承继Control来取得了ViewState功效。它的范例是system.Web.UI.StateBag,一个称号/值的工具汇合。
当哀求某个页面时,ASP.NET把一切控件的形态序列化成一个字符串,然后做为窗体的埋没属性送到客户端。当客户端把页面回传时,ASP.NET剖析回传的窗体属性,并赋给控件对应的值。固然这些全体是由ASP.NET卖力的,对用户来讲是通明的。
利用ViewState的前提
假如要利用ViewState,则在ASPX页面中必需有一个服务器端窗体标志(<formrunat=server>)。窗体字段是必须的,如许包括ViewState信息的埋没字段才干回传给服务器。并且,该窗体还必需是服务器真个窗体,如许在服务器上实行该页面时,ASP.NET页面框架才干增加埋没的字段。
Page的EnableViewState属性值为true。
控件的EnableViewState属性值为true。
页面自己将20字节摆布的信息保留在ViewState中,用于在回传时将PostBack数据和ViewState值分发给准确的控件。因而,即便该页面或使用程序禁用了ViewState,仍能够在ViewState中看到大批的残剩字节。
设置ViewState
ViewState能够在控件,页,程序,全局设置中设置。缺省情形下EnableViewState为true。假如要克制一切页面ViewState功效,能够在程序设置中把EnableViewState设为false。
在控件中:
<asp:DataGridEnableViewState="false"%>
或
DataGrid1.EnableViewState=false;
在页中:
<%@PageEnableViewState="false"%>
或
Page.EnableViewState=false;
在程序中:
在web.config中到场<pagesenableViewState="false"/>
在全局设置:
在machine.config中修正<pagesenableViewState="false"/>
EnableViewState优先级别:
全局设置<程序 <页<控件
注重:以下服务器控件不克不及克制ViewState
Textbox
Checkbox
CheckboxList
RadioButtonList
下面控件的形态经由过程IPostBackEventHandler和IPostBackDataHandler接口处置,而不是ViewState的机制,以是EnableViewState没无效果。
ViewState工具
在页面回传间通讯,ASP中一样平常使用窗体的属性和session来寄存数据,在ASP.NET中也能够利用ViewState工具来做一样的处置。
在ViewState寄存数据:
ViewState=value;
或
ViewState.Add(key,value);
掏出数据:
TempStr=ViewState;
key不存在时前往空。
不克不及经由过程ViewState工具来会见控件的值。
静态创建控件的ViewState:
当必要静态地创建一个服务器控件,以下创建了一个RadioButton控件并到场到窗体控件汇合中:
RadioButtonrb=newRadioButton();
Page.Controls.Controls.Add(pc);
下面的代码增添一个控件到控件汇合末,一样也能够拔出到已有控件中的任何地位。
RadioButtonrb=newRadioButton();
Page.Controls.Controls.AddAt(1,pc);
一般,这些静态天生的控件的形态也必要天生到ViewState中往,但这个功效并没有完整完成,出格是天生的控件拔出到已有的控件中时。
当静态天生控件和已有控件并存时ViewState的了局是不成意料的。在页面回传时,起首非静态天生的控件在ASPX页中被天生,并在Page_Init
和Page_Load事务中读取ViewState。当页面的控件读取ViewState的值时,那些静态天生的控件却还没有被天生,以是当静态天生的控件被
天生时,页面就会省略失落ViewState大概以剩下也许毛病的ViewState来添补控件。
以是,当必要插一个静态天生的控件到已有控件中往时,最好把这个控件的ViewState经由过程EnableViewState克制失落。
提示:
1.当存在页面回传时,不必要保持控件的值就要把ViewState克制。
2.ViewState的索引是巨细写敏感的。
3.ViewState不是跨页面的。
4.为了能包存在ViewState中,工具必需是可流化大概界说了TypeConverter。
5.控件TextBox的TextMode属性设置为Password时,它的形态将不会被保留在ViewState中,这应当是出于平安性的思索。
6.在页面没有回传 或 重定向 或 在回传直达到(transfer)其他页面时不要利用ViewState。
7.在静态创建控件时要当心它的ViewState。
8.当克制一个程序的ViewState时,这个程序的一切页面的ViewState也被克制了。
9.只要当页面回传本身时ViewState才是延续的。
</p>专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
页:
[1]