asp.Netviewstate再送メカニズム

3107 ワード

返送メカニズムとは、はっきり言って自分で自分(本ページ)に送ることです.次に、デフォルトで追加されたDefaultを開くWebサイトを作成します.aspxページ、form部分のコードは以下の通りです.
 
  





次は、ページを実行したHTMLコードです.
 
  








もともとがらんとしたformフォームが豊富になっているのが見えますが、まず変化したのはformフォーム自体で、form 1というフォームにactionとmethodの属性が自動的に追加され、methodはpostとデフォルトで、actionはページ自体を指していると解釈されています.もう1つ変わったのはform 1フォームにid=「_VIEWSTATE」の非表示ドメインが追加されたことです.これが私たちが議論するView Stateです.
もう1つの例を挙げます.この場合、ページにLabelとTextBoxとButtonコードを追加します.
 
  





そしてButton 1_Clickには次のコードが書かれています.
 
  
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text += " ";
TextBox1.Text += " ";
}

では、Button 1にクリック数を増やしてみましょう.LabelコントロールとTextBoxコントロールは私たちのクリック数が増えるにつれて、その内容も絶えず変化しています.このような状況はWinformの中で非常によく見られ、理解しやすいですが、ASP.NETはHTTPプロトコルに基づくが,HTTPプロトコルは無状態プロトコルである.つまり,サーバには健忘症があり,少し前にリクエストしたばかりなのにpageオブジェクトを作成し,応答する.しかし、2回目のリクエストが到着したとき、サーバはもうあなたを知らなかった(サーバは新しいpageオブジェクトを作成し、以前とは何の関係もなく、再び応答します).このようなサーバに健忘症があるという悪条件の下で、Winformのような効果を達成するのは、本当に簡単なことではありません.
プリコンパイル命令Pageに属性EnableViewState=「false」(ViewState無効)を追加した後、ページを再実行し、Button 1を連続的にクリックし続けます.これはどのような効果ですか?Labelコントロールの効果は変化していませんが、TextBoxコントロールの内容は変化し続けています.これは何が原因ですか?ソースコードを見てみると
 
  

Label






3つのコントロールはそれぞれspan、テキストボックス(text)、コミットボタン(submit)となり、Button 1をクリックするとHTMLはコミットするフォームのすべてのフォームコントロールのnameとvalue属性を「&」でname=valueの文字列に接続し、actionが指すページ、methodが指定した方法でリクエストを送信します.フォームの送信方法をget()に変更してコミットをクリックすると、アドレスバーの変化に気づくことができます.
Labelコントロールが最終的に生成したラベルはspanであるが、フォームはコミット時にspanラベルのvalueをコミットしないが、inputのvalueをコミットするので、サーバはinputの最新のvalueを得ることができ、spanのvalueを送信していないため、サーバはspanの最新の修正を得ることができない.これが、ViewStateを無効にするとLabelは変化せず、inputが変化する理由です.この問題を解決するにはNetにはView Stateが導入されていますが、実はView Stateはhidden隠しドメインです.フォームはspanタグのvalueを送信しませんがhiddenコントロールのvalueを送信し、asp.Netはspanタグに値を割り当てるときに、このViewStateというhiddenコントロールに1部記録し、サーバがhiddenからLabelタグの元の内容を得ることができます.
これがViewStateの本質です.もちろんサーバー側にはLoadViewStateとSaveViewStateの方法があります.夜が更けたら、もう言わないでください.これは弟の最初の博文で、大胆にトップページに入れて、みんなが励ましを主として、レンガを撮って補佐することができることを望みます!ありがとう
譚兄にも感謝しなければなりません.その『道は遠くない人--ASP.NETコントロールの開発に深く入り込む』は私に多くの利益をもたらしました.
asp.Net viewstate除去