私のシナリオでは、ユーザーが (レコードをフィルタリングするための) いくつかのオプションを選択してから、ボタンをクリックします。結果(DBから取得したレコード)は新しいページに表示されます。
その手順を教えてください。また、データを保存するためにどの方法が使用されますか? そして、私が保存するデータは何ですか?
どうもありがとう 。
私のシナリオでは、ユーザーが (レコードをフィルタリングするための) いくつかのオプションを選択してから、ボタンをクリックします。結果(DBから取得したレコード)は新しいページに表示されます。
その手順を教えてください。また、データを保存するためにどの方法が使用されますか? そして、私が保存するデータは何ですか?
どうもありがとう 。
セッションで渡すか、GET で渡すことができます。セッション:
Session["Some_Name"] = parameter;
----------------------------------
retrive on the new page
parameter = (casting)Session["Some_Name"];
得る:
Response.Redirect(NewPage.aspx?parm1=p1?parm2=p2); // parm1,parm2 just a name. p1,p2 are paramters
----------------------------------
retrive on the new page
p1 = Request.QueryString["parm1"];
p2 = Request.QueryString["parm2"];
ノート:
理想的には (そして RESTful に)、このシナリオはおそらく次のように最適に機能します。
柔軟性を高めるために、Page2 はフォーム要素とクエリ文字列要素の両方をチェックする必要があります。(両方が送信された場合に、どちらが他方をオーバーライドするかを決定する必要があります。) そうすれば、フィルターをブックマークしたり、同僚に電子メールで送信したりすることもできます。
セッションや Cookie などを含める必要はありません。これにより、問題が不必要に複雑になり、シナリオの移植性や RESTful 性が低下します。
このシナリオで注意すべきことの 1 つは、「ページ」という言葉の使用です。これは WebForms (あなたが使用していると思います) の考え方では一般的かもしれませんが、「Web」には実際には「ページ」という概念がないことを理解する必要があります。それは「資源」の問題です。
この場合、Resource1 への応答 (Page1.aspx への GET 要求) は、Resource2 への POST アクション (Page2.aspx への POST 要求) を持つフォームであり、データで応答します。最良の設計結果を得るには、「ページ」と「リソースとリクエスト」の概念を頭の中で分離しておく必要があります。
とにかく、例に戻ります。Page1 は次のようになります。
<form method="POST" action="Page2.aspx">
<input type="text" name="filterText" />
<button type="submit" name="filter" value="Filter" />
</form>
これは非常に単純化されていることに注意してください。ASP.NET サーバー コントロールを使用してこれを構築することも、HTML で手動で構築することもできます。それは本当にあなた次第です。個人的には、出力をできるだけスリムに保つのが好きですが、フレームワークのツールをどれだけ使いたいかはあなた次第です。WebForms は通常、すべてがポストバックであると想定しているため、ツールのサポートについては、ASP.NET の「クロスページ ポスティング」を調べる必要があると思います。その場合はオンに設定するだけの問題だと思います。PostBackUrl
asp:button
Page2 のコード ビハインドではForm
、オブジェクトのプロパティを確認する必要がありRequest
ます。(詳細はこちら。) 次のようなものがあります。
if (!string.IsNullOrEmpty(Request.Form.AllKeys["filterText"]))
{
// Apply your filter when retrieving from the database. Simple if your database data comes back as a delayed-execution IEnumerable.
}
いつものように、入力チェックを行い、単純な SQL クエリを使用している場合は SQL インジェクションを防ぎ、エラー処理などを行いたいと思うでしょう。しかし、基本的な概念は仕事を成し遂げます。