質問: 初心者です。 すみませんが、どうぞよろしくよろしくお願いします。 ### [環境] Windows10 Microsoft Visual Studio Community 2017 C# ASP.NET Webアプリケーション(.NET Framework4.6.1) SQL Server 2017 Express エディション ### [概略] [List.aspx]で概略一覧を表示させて、当該ページのリンクボタンをクリックすると、 別のページの[Detail.aspx]に詳細を表示させる様なものを検討しています。 イメージとしては、顧客リストであるList.aspxに[ID](hyperlink)と[顧客名]を 表示させて、IDをクリックすると、紐づけられた顧客情報が[Detail.aspx]に表示されると いったものです。 (例えば、List.aspx内でIDが3の情報を確認したい場合は、当該リンクをクリックすると、 Detail.aspx?ID=3という指定の仕方で詳細を表示させるといった具合です。) また、List.aspxには曖昧検索ができるようになって、表示件数を絞り込んだ状態で、 IDをクリックさせるといった使い方を考えています。 ### [やりたいこと] **Detail.aspxからList.aspx戻る(再表示させる)ときに、Detail.aspxに[戻る]ボタンを配置して、List.aspxで行った直前の検索結果を表示させたいのです。** ### [各ページの詳細(わかる範囲で)] ### ●List.aspx SqlDataSource SQL Server内で作成したView [SHISAKU1]に対して SELECT * FROM [SHISAKU1] WHERE (([会社名] LIKE '%' + @会社名 + '%') を設定 GridViewを使ってView [SHISAKU1]を表示させる。 GridViewの列IDがハイパーリンクとして設定され、これをクリックすると、 別ページDetail.aspx?ID=(数字)が表示される。 ページ内にTextBoxとbuttonを配置。TextBox内に文字列を入力後buttonをクリックすると GridViewに検索結果が表示される(表示が絞り込まれる)。 ### ●Detail.aspx SqlDataSource SQL Server内で作成したView [SHISAKU1_SHOUSAI]が設定されている。 GridViewを使ってView [SHISAKU1_SHOUSAI]の内容が表示される。 単純にデータを表示させるだけ。 教えていただければありがたいです。 どうぞよろしくお願い致します。
回答: > > Detail.aspxからList.aspx戻る(再表示させる)ときに、Detail.aspxに[戻る]ボタンを配置して、List.aspxで行った直前の検索結果を表示させたいのです。 > > > List.aspx に「直前の検索結果」を表示するには、Detail.aspx に遷移する前にユーザーが List.aspx の TextBox に入力した文字列をサーバー側で保持しておく必要があるはずです。 ページ情報を保持するプロセスを「状態管理」と言いますが、ASP.NET では以下の記事にあるオプションが用意されています。(このあたりはご存知かもしれませんが) ASP.NET の状態管理の概要 それらのオプションのうちどれを選択するかについては以下のガイドラインがあり、今回のケースではセッションが適切だと思います。 ASP.NET の状態管理に関する推奨事項 List.aspx で ID をクリックするとポストバックされるようにし、サーバー側のクリックイベントのハンドラで Response.Redirect を使って Detail.aspx に遷移するようにすれば、ポストバックした時点で List.aspx の TextBox の文字列をセッションに保持できます。 Detail.aspx の [戻る] ボタンをクリックして List.aspx を呼び出したときに、サーバー側でセッションに保持された TextBox の文字列を渡してその条件で DB にクエリを投げて結果を GridView に表示するということを検討してはいかがでしょう。 別の方法としては、List.aspx と Detail.aspx を 2 ページに分けないで、リスト用の GridView と詳細用の GridView を同一ページに実装し、以下の記事のように ModalPopupExtender を利用して見かけ上 2 ページに分けるという方法もあります。 ModalPopup で編集・更新操作 この方法ですと、1 ページに全て実装されるので、もともとサーバーコントロールに備わっている ViewState を利用でき、セッションは使う必要がありません。個人的にはこれがお勧めです。 その他、Wizard または MultiView コントロールも使えるかもしれません。検討してみてください。 ちなみに、手順に従って複数のステップでデータを収集・表示していく場合は Wizard、順次ではなく条件に応じて変化する手順を表示する場合は MultiView がよさそうです。