ViewStateをページの下部に移動します

問題



WebFormsを使用する場合、ViewStateとの闘いを続けます(このテクノロジーの使用は、会社のプロジェクトでWCSFパターンを使用するパーティーポリシーによるものです)。



前の記事で、 ViewStateをユーザーのブラウザーからセッションに移動する可能性について検討しました。 ページ上のViewStateを削除できたのは素晴らしいことですが、この方法では、状態サーバーの再起動に問題が発生する場合があります(ただし、経験豊富な友人は遭遇しませんでした)。



それでもViewStateをブラウザ側に残すことに決めた場合、(肥大化したhtmlに加えて)別の問題が発生します-ceteris paribus、検索エンジンはページの上部に近いほど情報をランク付けします。 当然、各ページの先頭に巨大なViewStateが存在することは望ましくありません。





解決策



したがって、必要なのは、出力ストリームをインターセプトし、ページの上部からViewStateで非表示フィールドを切り取り、フォームの終了タグの前に挿入することだけです。

ページアダプタを書きましょう:

using System.IO;

using System.Web.UI;



namespace MyCompany.Web

{

/// <summary>

/// ViewState

/// </summary>

public class MoveViewStatePageAdapter : System.Web.UI.Adapters.PageAdapter

{

protected override void Render(HtmlTextWriter writer)

{

// HTML,

var sw = new StringWriter ();

var hw = new HtmlTextWriter(sw);



base .Render(hw);

var html = sw.ToString();



hw.Close();

sw.Close();



// ViewState

var start = html.IndexOf( @"<input type=" "hidden" " name=" "__VIEWSTATE" "" );



if (start > -1)

{

var end = html.IndexOf( "/>" , start) + 2;



// ViewState

var viewstate = html.Substring(start, end - start);

html = html.Remove(start, end - start);



// ViewState

var formend = html.IndexOf( "</form>" ) - 1;

html = html.Insert(formend, viewstate);

}



// HTML

writer.Write(html);

}

}

}



* This source code was highlighted with Source Code Highlighter .








App_Browsersフォルダーで、コンテンツを含むdefault.browserファイルを作成します。

< browsers >

< browser refID ="Default" >

< controlAdapters >

< adapter controlType ="System.Web.UI.Page" adapterType ="MyCompany.Web.MoveViewStatePageAdapter" />

</ controlAdapters >

</ browser >

</ browsers >




* This source code was highlighted with Source Code Highlighter .








結果を見てください!



PS ViewStateをページの下部に移動するコードを使用しました

httpモジュールを使用する別のソリューション



All Articles