15

PHP のバックグラウンドを持つ私は、きれいな URL を使用して、あるサービスから別のサービスにデータを取得するのが大好きです。

ただし、一部の ASP.NET プロジェクトでは、URL に恐ろしい ViewState パラメーターが含まれています。

これをグローバルにオフにする方法はありますか?

ASP.NET アプリにどのような影響がありますか?

4

6 に答える 6

35

次のように、サイト全体のビューステートをオフにすることができます。

    <system.web>
<pages enableViewState="false" />

つまり、URLで取得するべきではありません。ViewState は、ポストバック (通常はポストを使用) でサーバーに送信される隠しフィールドです。ページがクライアントにレンダリングされたときのコントロールの状態を保持し、ポストバックごとに送信します。アプリケーションで機能する場合は、代わりに post を使用するように切り替えることができます (問題のフォームは確かに get を使用しています)。そうでない場合は、Jon の回答を見てください。

viewstate が asp.net のライフ サイクルにどのように適合するかについて詳しくは、次のリンクを確認してください: http://msdn.microsoft.com/en-us/library/ms972976.aspx

于 2009-03-15T07:52:29.290 に答える
10

Reputation Trackerを書いているときに、同様の質問がありました。

runat="server"設定よりも規律に関係する設定でフォームを使用しない以外に、グローバルにどのように行うかはわかりません。特に、フォームに設定した場合、どこでもオフにしていてrunat="server"を取得しない場合でも、常にビューステートパラメーターを取得すると思います。とにかく、それは私の経験でした。

明らかに、これはいくらか制限されますが、ASP.NET の適切な部分に (ASP.NET コントロールの代わりに) HTML サーバー コントロールを使用すると、作業がずっと簡単に理解できるようになることがわかりました。

于 2009-03-15T07:52:33.860 に答える
8

<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 対応ページが使用するすべてのマスター ページに対して同じことを行う必要があります。

于 2012-10-23T21:11:38.510 に答える
4

これを web.config ファイルに追加します。

<Pages enableViewState="false"/> 
于 2009-03-15T07:51:28.823 に答える
3

ASP.Net MVC に切り替えることができます。私が理解していることから、それはViewStateを使用していません。

于 2009-03-15T08:03:28.233 に答える
2

ただし、ほとんどのASP.NETWebフォーム開発者が期待する特定の動作はViewStateなしでは機能しないことを思い出してください。ViewStateの目的は、さまざまなページとコントロールのプロパティが1つのリクエストから次のリクエストまで持続するという錯覚を与えることです。ViewStateには、すべてのコントロールプロパティが含まれているわけではなく、変更されたものだけが含まれています。ViewStateは、フォームが最後にレンダリングされたときのこれらのプロパティを保持するという考え方です。

1つの良い例はSelectedIndexChanged、ドロップダウンのイベント(自動ポストバックが設定されていないイベント)です。これが機能するのは、ViewStateが前のインデックスを保持し、フォームが現在のインデックスをポストし、コントロールが2つを比較して、選択したインデックスが変更されたことを確認するためです。それがSelectedIndexChangedイベントを発生させるときです。ViewStateがないと、そのイベントは発生しません。イベントTextChanged等も同様です。

GETの状況(私が遭遇したことはありません)がない場合、ViewStateの大きな問題は、必要のない場所でGETを使用することです。グリッドコントロールは、すべての行のすべてのコントロールの以前の値を保持する必要がないため、ViewStateを有効にしないでください。

于 2009-03-15T10:40:12.820 に答える