私は従来のASPからASP.NETに移行しており、多くの人がすでに「ビューステート」として知っているものに遭遇しました。私は自分の思い込みで銃をジャンプしているかもしれませんが、それは非常に面倒に見えます。私は過去に多くのASPフォームを開発しましたが、状態の維持に問題はありませんでした。別の方法がありますか、それともASP.NETでこのViewstateのことを学ぶ必要がありますか?Visual Studio 2008、VB.NETを言語の背後にあるコードとして使用し、Frameworkv3.5をSQLServer2005で使用しています。
13 に答える
あなたはする必要はありません。MVCフレームワークを確認してください。ViewStateを排除し、古いASPとして機能します(少なくともこの観点からは)。
この一連の投稿は、ViewState を理解するために必読です
私はそれを無効にし、ほとんどの作業を Load ではなく Page_Init で行います (値は ControlState により維持されます)。この設定は私にとってはうまくいきました。
ViewState はオプションですが、役に立ちます。ViewState とは、サーバー側のコントロールで発生するすべての変更です。したがって、テキストをラベルに割り当てていて、ポストバックごとに再割り当てする必要なくそのテキストを保持したい場合は、それを維持する必要があります。私が常に ViewState をオンのままにしている別の例は、データバインドされたものです。
そうは言っても、同じ理由で ViewState をオフにすると便利な場合があります。たとえば、私が常にViewState をオフにしている場所の 1 つは、MESSAGE ラベルです。そうすれば、ユーザーにメッセージを出力する必要がある場合 (一度だけ表示されて消えるメッセージ)、ラベルにテキストを追加するだけで、それを忘れることができます。次のポストバック中に、ラベルはそのコントロールの ASPX 宣言で見つかったテキスト (この場合は空の文字列) に自動的に戻ります。
ここで、これは PostBack 中に IIS に送信される値であるフォーム コレクションとは関係がないことに注意してください。フォーム コレクションは、ユーザーがフォーム要素 (テキストボックス、チェックボックス、ドロップリストなど) に入力した値を送信します。これらの .NET は適切な場所に読み込まれます。これは、ViewStateが処理された後に発生します。
このように、「こんにちは」というフレーズを含むテキストボックスをクライアントに送信すると、ユーザーはそれを「See ya」に変更してからフォームを送信します.Page_Loadイベントが発生するまでにテキストボックスに含まれるものは、 TEXT属性に「またね」。
従来のASPでは、常にHIDDENフィールドを使用して作業を行いました。ビューステートは、それを自動的に行う方法にすぎません。私を信じてください。学習曲線はあなたが思うほど高くはありません。
ViewState をオフにすると、一部のコントロールが大幅に機能しなくなるため、これらの問題に対処する準備をしてください。怠けてそのままにしておくのが最も簡単ですが、チェックしないままにしておくと、ViewState は簡単に HTML のサイズの 30% を占めてしまいます。
たとえば、DropDown があり、それを Fruits のリストにバインドするとします。ページ読み込みの if(! IsPostBack) { } ブロックでバインドします。ViewState をオフにすると、ボタンをクリックしたときに項目が失われます。ページをロードするたびにバインドする必要があります。選択したインデックスも失われるため、Request.Form[] 変数からそれを取得する必要があります。
ASP.NET を使用している場合、Viewstate はパッケージの一部です。基本的なページ/Web サイトの場合、Viewstate の使用方法を「知っている」必要はありません。ページにコントロールを配置するときに使用されます。
ASP.NET で Viewstate を回避するのは非常に困難です。プロジェクト レベルで Viewstate をオフにしても、一部の個々のコントロールは引き続き Viewstate を使用して情報を保持するためです。
Viewstate を処理したくない場合は、ASP.NET MVC フレームワークの使用を検討してください。Classic ASP の MVC フレームワークの方が使いやすいでしょう。
ViewStateは、すべてではないにしてもほとんどすべての場合に完全にオプションです。ASP.NETは、ViewStateEnabled = falseの場合でも、フィールドに自動的に再入力します。私はASP.NETを5〜6年間使用しており、ViewStateに依存する必要はありませんでした。可能な場合は無効にすることもできます。
ViewState は、ほとんどの場合、自動的に機能します。これは、ASP.NET がすべてのコントロールの現在の状態を追跡する方法です。
追加のデータを保存したい場合は、viewstate を手動で使用することもできます。それは次のように簡単です:
Viewstate["Key"] = value;
唯一の注意点は、viewstate に保存するオブジェクトはシリアライズ可能でなければならないということです。
私は最近自分でそれを始めたので、DataGrids と DropDownLists で ViewState を避けることを強くお勧めします。私は楽しみのためにこれを行ったのではなく、他の問題を引き起こしているほど大きくなってしまったページを修正しなければなりませんでした。しかし、これは簡単であることが判明し、結果は非常に劇的で、非常に満足しています. もちろん、小さくて単純なアプリや少量のデータの場合、これは必要ありませんが、一方で一貫性があることは良いことです (プロセスを継続的に改善できるように、常に既知から既知へと移行します...)、およびその理由余分な荷物を持ち歩くことはありますか?
これには、手動で少し介入する必要があります。たとえば、ドロップ ダウン リストのビューステートをオフにした場合、ポストバックごとにそれらを再バインドし、Request オブジェクトから SelectedValue を復元する必要があります。これについてはよく読む必要がありますが、Google にはすぐに入手できる情報がたくさんあります。
ViewStateは、Webフォームのメタファーに固有の必要悪です。私は個人的に、この方法論は時代遅れで肥大化しており、一般的にWebフレンドリーではないと感じています。上記のようにMVCフレームワークを確認することをお勧めします。
ViewStateを「キャッシュ」として使用してデータをやり取りする誘惑を避けることをお勧めします(クラスター化されたセットアップとSQLに裏打ちされたセッション状態がないため、Webサイトがこれを行っているのを見てきました)。データはシリアル化されてページに追加され、リクエストごとにラウンドトリップを実行する必要があります。これにより、ページの合計サイズが増加し、サイトの読み込みが遅くなります。
自分で消費するためにコードを書いている場合は、それをオフにして心配する必要はありません。
おそらく、他の人が作成した Web フォーム コードを保守することになるので、構成オプションと問題点を理解しておく必要があります。私が考えることができるトップいくつか
- サイト、ページ、およびコントロール レベルで無効にする方法
- MachineKey が Web ファームに関連する理由
- イベント ログが ViewStateAuthentication エラーでいっぱいになる理由
- ViewStateUserKey とは
実際の学習曲線に関しては、これはおそらくいくつかの MSDN 記事を徹底的に読むことです。
Viewstate は、ページに「ルート化」された asp.net コントロールに対して自動的に保持されます。あなたがしなければならないことはほとんどありません。値とその他の情報は、B64 エンコードされた非表示の入力で渡されます。必要に応じて見ることができますが、問題ではありません。すべて自動的に処理されます。