ASP.NET頁面中去除VIEWSTATE視圖狀態亂碼


保存頁的所有視圖狀態信息和控件狀態信息。

基於SEO技術的開發,在沒有接觸MVC框架 Razor 引擎的時候,我們需要使用ASP.NET引擎,如果使用ASP.NET引擎的服務器端控件,那么在ASP.NET頁面中就會生成 __Viewstate隱藏域 ,__Viewstate隱藏域產生的“ 亂碼 ”對網絡爬蟲是極其不友好!!

“ 亂碼 ”如下:

1 <div class="aspNetHidden">
2 <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAevVXD1oYELeveMr0vHCmYP7LzJrIcTIdqhSMKVwuzUlG+r/E5r2IBU8/usjBP6bvE2c4iS0S7hMhxw1JoNuYef5SWTLAaw1o1yUXny4tbozOKqfv7TXcRdFrrz4sk+amqJ1HXkqp47r3PB8OAXkfQkk9SVCu9vqcV7t6ajMdAYdjyd0irvSRGXq8LavSPmz9M=" />
3 </div>
View Code

那么所有 問題 就來了,在 商業項目 開發中就需要我們把__Viewstate隱藏域生成的“亂碼”去除掉。

這里我們討論如下幾個方案。

方案一:

去掉form的標簽的 runat="server" 屬性的話,就可以不生成__viewstate隱藏域,但有些情況服務器端控件就沒法正常使用了,所以在需要使用服務器端控件的時候就此方並不是太完美。

方案二:

給服務器端正控件的EnableViewState屬性設置為false,此時我們發現網頁的Viewstate有明顯代碼減少,但還是存在視圖狀態。。。

方案三:

些方案需要了解.NET的一些基類,如 System.Web.dll 。

System.Web.dll封裝了 LosFormatter 類。

在 MSDN 上對此類的描述是: 序列化 Web 窗體頁的視圖狀態。

此時我們需要LosFormatter類里封裝的Serialize方法,功能描述如下:將有限對象序列化 (LOS) 格式的對象轉換為視圖狀態值並將結果放置在 System.IO.Stream 對象中。

去除“亂碼”代碼如下:

/// <summary>
  /// 去除VIEWSTATE亂碼代碼如下所示:
  /// </summary>
   protected  LosFormatter losFormatter = new LosFormatter();

  /// <summary>
  /// 序列化所有視圖狀態信息和控件狀態信息。
  /// </summary>
  /// <param name="viewState">要在其中存儲視圖狀態信息的 Object</param>
  protected override void SavePageStateToPersistenceMedium(object viewState)
  {
    string val = Request.Url + "__VIEWSTATE";
    System.IO.MemoryStream stream = new System.IO.MemoryStream();
    losFormatter.Serialize(stream, viewState);
    stream.Flush();
    Session[val] = stream;
  }
View Code

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM