關于EnableViewState禁用與使用心得
每個web控件都有個ViewState值,如果一個頁面有太多的web控件而不禁用他們的viewstate值的話,會讓頁面速度大大降低。那麼哪些控件的 EnableViewState="false" 哪些控件的EnableViewState="true"呢? 一個個控件說起 textbox,如果你隻需要取他的text裡面的值,而不是要他響應什麼事件,那他的viewstate是可以禁用的. linkbutton 和asp:button還有别的按紐,如果你隻需要他響應單擊事件,那他的viewstate可以禁用. hyperlink,一般情況下不建議用他.他的功能和<a href基本上一樣,如無特殊需要盡量不要用他.他的值如果是需要背景動态添加進去的 話,viewstate值不能禁用,否則在執行其它事件後他的值又不能顯示,如果在前台就可以直接确定他的值,那他的viewstate是可以禁用的,但無論 他的值是需要前台就可以确定還是需要背景填充進去,<a href一樣都能完成的.是以一般情況下不需要使用他 所有驗證控件,隻要不需要在背景對他再進行編輯,都可以禁用viewstate,包括自定義驗證控件都可以禁用 dropdownlist,listbox還有checkboxlist這一類的都差不多,如果是前台就能确定他的選項值,那他的viewstate可以禁用,不影響他的取值, 但如果他的值是需要背景來梆定,又是需要在!ISPostBack裡綁定的話,那他的viewstate值是不能禁用的,否則一執行其它事件以後,他的值就不 存在了. 其實最占用資源的就是datagrid,repeater,datalist等這些控件. datagrid裡面資料量龐大.但他的viewstate值在翻頁,編輯等操作時起到很大的作用,是以datagrid的viewstate值不能完全禁用. 我們這裡以datagrid為例介紹一個如何禁用一批viewstate來優化速度 datagrid裡<asp:BoundColumn>.他在浏覽時是個Label,編輯時他是一個textbox.而label和textbox都是帶有viewstate.比如是一個5列20行的 datagrid,當他資料填充以後他就含有100個viewstate的值,這是一個龐大的資料..如果不想辦法禁用是很占用資源的. <asp:BoundColumn>方法雖然友善,但盡量大家不要使用,用如下方法代替 <asp:TemplateColumn> <ItemTemplate> <div align=center> <%# DataBinder.Eval(Container,"DataItem.id") %> </div> //不要使用任何控件,一樣能顯示,而且不占用資源 </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="Textbox2" Text='<%# DataBinder.Eval(Container,"DataItem.listid")%>' Runat="server" EnableViewState=False Columns="自己指派"> </asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> datagrid裡的項,viewstate能禁用的盡量禁用,太占資源了 |