PHP のバックグラウンドを持つ私は、きれいな URL を使用して、あるサービスから別のサービスにデータを取得するのが大好きです。
ただし、一部の ASP.NET プロジェクトでは、URL に恐ろしい ViewState パラメーターが含まれています。
これをグローバルにオフにする方法はありますか?
ASP.NET アプリにどのような影響がありますか?
PHP のバックグラウンドを持つ私は、きれいな URL を使用して、あるサービスから別のサービスにデータを取得するのが大好きです。
ただし、一部の ASP.NET プロジェクトでは、URL に恐ろしい ViewState パラメーターが含まれています。
これをグローバルにオフにする方法はありますか?
ASP.NET アプリにどのような影響がありますか?
次のように、サイト全体のビューステートをオフにすることができます。
<system.web>
<pages enableViewState="false" />
つまり、URLで取得するべきではありません。ViewState は、ポストバック (通常はポストを使用) でサーバーに送信される隠しフィールドです。ページがクライアントにレンダリングされたときのコントロールの状態を保持し、ポストバックごとに送信します。アプリケーションで機能する場合は、代わりに post を使用するように切り替えることができます (問題のフォームは確かに get を使用しています)。そうでない場合は、Jon の回答を見てください。
viewstate が asp.net のライフ サイクルにどのように適合するかについて詳しくは、次のリンクを確認してください: http://msdn.microsoft.com/en-us/library/ms972976.aspx。
Reputation Trackerを書いているときに、同様の質問がありました。
runat="server"
設定よりも規律に関係する設定でフォームを使用しない以外に、グローバルにどのように行うかはわかりません。特に、フォームに設定した場合、どこでもオフにしていて値runat="server"
を取得しない場合でも、常にビューステートパラメーターを取得すると思います。とにかく、それは私の経験でした。
明らかに、これはいくらか制限されますが、ASP.NET の適切な部分に (ASP.NET コントロールの代わりに) HTML サーバー コントロールを使用すると、作業がずっと簡単に理解できるようになることがわかりました。
<page>
web.configの要素を使用して、デフォルトで ViewState をオフにします。EnableViewState="true"
web.config で ViewState を無効にすると、ディレクティブでの使用は@Page
機能しなくなります。後で特定のページに ViewState が必要であると判断した場合は、<location>
要素を使用してそのページだけをオンに戻すことができます。
<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.NETWebフォーム開発者が期待する特定の動作はViewStateなしでは機能しないことを思い出してください。ViewStateの目的は、さまざまなページとコントロールのプロパティが1つのリクエストから次のリクエストまで持続するという錯覚を与えることです。ViewStateには、すべてのコントロールプロパティが含まれているわけではなく、変更されたものだけが含まれています。ViewStateは、フォームが最後にレンダリングされたときのこれらのプロパティを保持するという考え方です。
1つの良い例はSelectedIndexChanged
、ドロップダウンのイベント(自動ポストバックが設定されていないイベント)です。これが機能するのは、ViewStateが前のインデックスを保持し、フォームが現在のインデックスをポストし、コントロールが2つを比較して、選択したインデックスが変更されたことを確認するためです。それがSelectedIndexChanged
イベントを発生させるときです。ViewStateがないと、そのイベントは発生しません。イベントTextChanged
等も同様です。
GETの状況(私が遭遇したことはありません)がない場合、ViewStateの大きな問題は、必要のない場所でGETを使用することです。グリッドコントロールは、すべての行のすべてのコントロールの以前の値を保持する必要がないため、ViewStateを有効にしないでください。