1

私のシナリオでは、ユーザーが (レコードをフィルタリングするための) いくつかのオプションを選択してから、ボタンをクリックします。結果(DBから取得したレコード)は新しいページに表示されます。

その手順を教えてください。また、データを保存するためにどの方法が使用されますか? そして、私が保存するデータは何ですか?

どうもありがとう 。

4

2 に答える 2

1

セッションで渡すか、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"];

ノート:

  • セッションで保存すると、パラメータのタイプが保持されます (オブジェクトを移動できます)。
  • GET でリダイレクトすると、パラメーターは文字列として移動します (オブジェクトを移動することはできません)。
  • GET でリダイレクトすると、パラメーターはアドレスのユーザーに表示されます。
于 2011-04-24T22:13:39.567 に答える
1

理想的には (そして RESTful に)、このシナリオはおそらく次のように最適に機能します。

  1. Page1 には、フィルターの作成に必要なさまざまなオプションを含むフォームがあります。
  2. Page1 のフォームは Page2 に POST します (これは Page1 でもかまいませんが、別のページにしたいようです)。
  3. Page2 は POST データを読み取り、フィルターを実行し、結果を表示します。

柔軟性を高めるために、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 の「クロスページ ポスティング」を調べる必要があると思います。その場合はオンに設定するだけの問題だと思いますPostBackUrlasp: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 インジェクションを防ぎ、エラー処理などを行いたいと思うでしょう。しかし、基本的な概念は仕事を成し遂げます。

于 2011-04-24T22:16:21.127 に答える