天天看點

關于EnableViewState禁用與使用心得

關于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能禁用的盡量禁用,太占資源了

繼續閱讀