ビューステートを完全にオフにするにはどうすればよいですか?
-
22-07-2019 - |
質問
PHPのバックグラウンドから来て、きれいなURLを使用して、あるサービスから別のサービスにデータを取得するのが大好きです。
ただし、一部のASP.NETプロジェクトでは、URLに恐ろしいViewStateパラメーターが含まれています。
これをグローバルにオフにする方法はありますか?
これはASP.NETアプリにどのような影響を与えますか?
解決
次のように、サイト全体のビューステートをオフにできます。
<system.web>
<pages enableViewState="false" />
とはいえ、URLで取得するべきではありません。 ViewStateは、ポストバック(通常はポストを使用)でサーバーに送信される隠しフィールドです。ページがクライアントにレンダリングされたときにコントロールの状態を保持し、ポストバックごとに送信します。アプリケーションで機能する場合は、代わりにpostを使用するように切り替えることができます(問題のフォームは必ずgetを使用しています)。
ビューステートがasp.netライフサイクルにどのように適合するかの詳細については、次のリンクを確認してください。 http://msdn.microsoft.com/en-us/library/ms972976.aspx 。
他のヒント
執筆時に同様の質問がありましたレピュテーショントラッカー。
runat="server"
が設定されたフォームを使用しないこと以外は、グローバルにどのように行うかわかりません。これは、設定よりも規律に関係しています。特に、フォームに<=>が設定されている場合は、どこでもオフにして values を取得しない場合でも、常にviewstateパラメーターを取得すると信じています。とにかくそれは私の経験でした。
明らかにこれによって多少制限されますが、ASP.NETの適切な部分に(ASP.NETコントロールの代わりに)HTMLサーバーコントロールを使用すると、理解しやすくなることがわかりました。
web.configで<page>
要素を使用して、デフォルトでViewStateをオフにします。 web.configでViewStateを無効にすると、EnableViewState="true"
ディレクティブで@Page
を使用しても機能しなくなります。後で特定のページにViewStateが必要であると判断した場合は、<location>
要素を使用して、そのページに対してのみViewStateをオンに戻すことができます。
<configuration>
<system.web>
<pages enableViewState="false" />
</system.web>
<location path="MyFolder/MyPage.aspx">
<system.web>
<pages enableViewState="true" />
</system.web>
</location>
<location path="Site.master">
<system.web>
<pages enableViewState="true" />
</system.web>
</location>
</configuration>
ViewState対応ページが使用するすべてのマスターページに対して同じことを行う必要があります。
これをweb.configファイルに追加します:
<Pages enableViewState="false"/>
ASP.Net MVCに切り替えることができます。私の理解では、ViewStateを使用していません。
ただし、ほとんどのASP.NET Webフォーム開発者が期待する特定の動作は、ViewStateなしでは機能しないことを思い出してください。 ViewStateの目的は、さまざまなページおよびコントロールのプロパティが1つの要求から次の要求まで持続するという幻想を提供することです。 ViewStateにはすべてのコントロールプロパティが含まれているわけではなく、変更されたプロパティのみが含まれています。 ViewStateは、これらのプロパティをフォームが最後にレンダリングされたときの状態を保持するという考え方です。
1つの良い例は、ドロップダウンのSelectedIndexChanged
イベント(自動ポストバックが設定されていないイベント)です。これは、ViewStateが前のインデックスを保持し、フォームが現在のインデックスをポストし、選択したインデックスが変更されたことを知るためにコントロールが2つを比較するために機能します。そのとき、TextChanged
イベントが発生します。 ViewStateがなければ、そのイベントは発生しません。 <=>イベントなどについても同様です。
GETの状況(これまで遭遇したことはありません)がない場合、ViewStateの大きな問題は、それが不要な場所で使用することです。グリッドコントロールは、すべての行のすべてのコントロールの以前の値を保持する必要がないため、ViewStateを有効にしないでください。