ViewState を利用してクエリ文字列を渡す必要をなくすことはできますか?

StackOverflow https://stackoverflow.com/questions/1206492

  •  05-07-2019
  •  | 
  •  

質問

いくつかの展開可能なリストを含むページがあります。理想的には、これらの各リストへのリンクを表示し、いずれかをクリックすると、その特定のリストが表示されたページがリロードされるようにしたいと考えています。ViewState を使用すると、非表示の入力フィールドやクエリ文字列などが不要になると読みましたが、その概念がよくわかりません。

基本的に次の 2 つのことを達成する必要があります。

  1. リンクをクリックしたときにリストの ID を ViewState obj に追加します
  2. ページ読み込み時にViewState objからIDを読み取り、そのリストを表示

誰かが私にリソースを提供したり、このトピックに関して助けてくれませんか?ありがとう!

役に立ちましたか?

解決

ViewState は基本的に、ページの上部に保存される 1 つの長いエンコードされた非表示フィールドです。これと通常の隠しフィールドの主な違いは、ASP .NET がポストバック時に自動的にそれをデコードして解析することです。

やりたいことを達成するためのより良い方法があります。

  • クエリ文字列を使用できます。渡すのはリスト ID だけです。リンクの末尾にリスト ID を追加し、Page_Load でそれを探します。適切なリストが見つかったら、それをロードします。リスト ID が渡されない場合に対処する必要があります。 クエリ文字列は悪くない. 。ページの重量を大幅に減らすのに役立ちます。まともな物と一緒に使うと URLリライタ, 、何が渡されるか (そして重要なことに、何が渡されないか) をかなり制御できるようになります。
  • ASP .NET コントロール ( Button や LinkBut​​ton など) を使用してリストの表示をトリガーしている場合は、 CommandArgument プロパティを設定し、それをイベント コードで取得できます。次に、これをパラメータとして、リストのレンダリングを処理するメソッドまたはコントロールに渡すことができます。

他のヒント

ViewStateは、ページ間で引数を渡すのではなく、ポストバック間で単一ページに情報を保存するために使用されます。

次を使用してページ間で引数を渡すことができます:

  1. セッション
  2. クエリ文字列
  3. Cookie
  4. カスタムデータベース
  5. クロスページポストバック

これらのメソッドのいずれも、要求されているページのViewStateにデータを自動的に追加しません。そのうち、#2のみがストレートHTMLリンク(GET)で機能し、残りは通常ポストバック(POST)を伴うと考えています。

要求されたページには、常に何らかの種類のViewStateセッター( ViewState [" Id"] = source.Id )が必要です。

方法:ASP.NET Webページ間で値を渡す

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top