4

ポストバックを実行するEnableViewstate = falseと、テキストボックスコントロールはテキスト値を保持しますが、ラベルコントロールは保持しません。ボタンのクリックイベントで、ラベルとテキストボックスの両方のテキストを変更しています。

protected void Button1_Click(object sender, EventArgs e)
{
    TextBox1.Text = "Message Changed";
    Label1.Text = "Message Changed";
}

ポストバック用の別のボタンが私のページにあります。

また、このコントロールにビューステートが必要ない場合、ビューステートを必要としないすべてのコントロールのリストはありますか?

4

3 に答える 3

6

実装するすべてのコントロールIPostBackDataHandlerは、ViewStateがオフの場合でも値をロードします。ViewStateが無効になっている場合、のようなイベントTextChanged やのような他のプロパティは機能ForeColorしないことに注意してください。

これが実装するコントロールのリストですIPostBackDataHandler

  • チェックボックス
  • CheckBoxList
  • ドロップダウンリスト
  • HtmlInputCheckBox
  • HtmlInputFile
  • HtmlInputHidden
  • HtmlInputImage
  • HtmlInputRadioButton
  • HtmlInputText
  • HtmlSelect
  • HtmlTextArea
  • ImageButton
  • リストボックス
  • RadioButtonList
  • テキストボックス

ビューステートがオフに設定されている場合でも、テキストボックスがポストバック中にデータを保持する理由

ページがサーバーに送信または投稿されるたびに、フォームデータ全体がリクエストのコレクションとしてサーバーに投稿されます。コレクションはNamedValueコレクションの形式であり、このコレクションには、コントロールのuniqueidとコントロールの値とのマッピングがあります。次のコードスニペットを使用して、フォームコレクションからデータを読み取ることができます

//Reading textbox value from the form collection 
string textboxvalue = Request.Form[textbox1.UniqueID];

ASP.NETは、このプリミティブを使用してコントロールの値を更新します。ASP.NETは、フォームコレクションからデータを読み込むコントロールにIPostBackDataHandlerを使用します。

于 2012-08-15T12:56:25.240 に答える
2

ViewStateリクエスト間でデータを永続化するための厄介なハックです。Webはステートレスであり、ViewStateステートフルに見せようとします。

TextBox(および他の<input/>コントロール)はViewState、値がフォームにPOSTされているのに対し、()値はそうではないため、値をLabel保持<span/>しないと思います。詳細については、@TimSchmelterの回答を参照してください。

ページサイズを気にする多くのWebフォーム開発者は、ViewStateグローバルに無効にし、特定のコントロールに対してのみ有効にします。たとえば、で標準のページングを使用する場合は、ASP.NETがユーザーがクリックしたページ番号を認識できるようにGridViewする必要があります。ViewStateカスタムページングを使用し、ページ番号に実際のリンクを使用してから、をオフにすることができますViewState

サーバーコントロールの使いやすい機能の多くを失うことなくWebフォームを使用することは興味深いタスクViewStateですが、マークアップと状態の制御ではるかに多くを得ることができます。ただし、これほど多くの制御が必要な場合は、Webフォームの代わりにMVCの使用を検討する必要があると思います。

于 2012-08-15T12:50:10.290 に答える
0

それはあなたの要件に依存します。ViewStateは、ページの複数のポストバック中にデータを保持するために使用されます。ビューステートが有効になっている場合、データは保持されます。有効になっていない場合、データは失われます。TextBoxがデータを保持しているとおっしゃっていましたが、ブラウザはテキストボックスの値もキャッシュに保存していると思います。

于 2012-08-15T12:53:02.727 に答える