ViewState を利用してクエリ文字列を渡す必要をなくすことはできますか?
質問
いくつかの展開可能なリストを含むページがあります。理想的には、これらの各リストへのリンクを表示し、いずれかをクリックすると、その特定のリストが表示されたページがリロードされるようにしたいと考えています。ViewState を使用すると、非表示の入力フィールドやクエリ文字列などが不要になると読みましたが、その概念がよくわかりません。
基本的に次の 2 つのことを達成する必要があります。
- リンクをクリックしたときにリストの ID を ViewState obj に追加します
- ページ読み込み時にViewState objからIDを読み取り、そのリストを表示
誰かが私にリソースを提供したり、このトピックに関して助けてくれませんか?ありがとう!
解決
ViewState は基本的に、ページの上部に保存される 1 つの長いエンコードされた非表示フィールドです。これと通常の隠しフィールドの主な違いは、ASP .NET がポストバック時に自動的にそれをデコードして解析することです。
やりたいことを達成するためのより良い方法があります。
- クエリ文字列を使用できます。渡すのはリスト ID だけです。リンクの末尾にリスト ID を追加し、Page_Load でそれを探します。適切なリストが見つかったら、それをロードします。リスト ID が渡されない場合に対処する必要があります。 クエリ文字列は悪くない. 。ページの重量を大幅に減らすのに役立ちます。まともな物と一緒に使うと URLリライタ, 、何が渡されるか (そして重要なことに、何が渡されないか) をかなり制御できるようになります。
- ASP .NET コントロール ( Button や LinkButton など) を使用してリストの表示をトリガーしている場合は、 CommandArgument プロパティを設定し、それをイベント コードで取得できます。次に、これをパラメータとして、リストのレンダリングを処理するメソッドまたはコントロールに渡すことができます。
他のヒント
ViewStateは、ページ間で引数を渡すのではなく、ポストバック間で単一ページに情報を保存するために使用されます。
次を使用してページ間で引数を渡すことができます:
- セッション
- クエリ文字列
- Cookie
- カスタムデータベース
- クロスページポストバック
これらのメソッドのいずれも、要求されているページのViewStateにデータを自動的に追加しません。そのうち、#2のみがストレートHTMLリンク(GET)で機能し、残りは通常ポストバック(POST)を伴うと考えています。
要求されたページには、常に何らかの種類のViewStateセッター( ViewState [" Id"] = source.Id )が必要です。
所属していません StackOverflow