1

ユーザーがデータを入力して送信ボタンをクリックする ASP.Net フォーム (Page1) があります。

Page1 の一部として、サーバーで検証を行う必要がある CustomValidator を含む、いくつかの Validator があります。

ユーザーが送信ボタンをクリックすると、Page1 への投稿が行われ、検証ルーチンがサーバー上で実行されます。ボタン クリック ルーチンで Page.IsValid をチェックしている限り、フォームは処理が成功したかどうかを認識します。

検証に合格しないと、すべてが適切に Form1 に戻り、エラー メッセージが表示されます。

フォームが検証に合格したら、ユーザーが入力したデータを 2 番目のフォーム (Page2) に渡し、ユーザーが Page1 に入力したデータに基づいて Page2 を正しくレンダリングできるようにします。

データを Page2 に渡す一般的に受け入れられている方法、または最善の方法はありますか? 私が知っているいくつかの方法を次に示します。

  • クエリ文字列を使用して Page2 を呼び出します。場合によってはデータをユーザーに表示しないようにする必要があるため、これは機能しません。
  • 送信ボタンで PostBackUrl を使用して Page2 に移動します。私の知る限り、これは正しく機能しません。これは、Page1 のサーバー側の検証ルーチンが実行されないためです。
  • セッション変数を使用する: これが良くない特定の理由はわかりません。
  • Server.Transfer を使用します。これについては、実際に経験がありません。

これはかなり標準的なことだと思いますが、正しい方法に関する情報を見つけるのに苦労しています。

4

6 に答える 6

1

オブジェクトを使用するSessionことは、フォーム間で情報を渡す標準的な方法です。

@Servy は、この場合にServer.Transferがどのように役立つかについて、(以下のコメントで) 適切な説明を提供します。

あなたが述べたように、あなたが述べた他のオプションにはすべて問題があります...

セッションを使用する場合:
Page1 のポストバックで、次の値を設定できます。

Session["myVar"] = <Data you want to pass to page2>

OnLoad の page2 で:

if (Session["myVar"] != null)
{
   myVar = Session["MyVar"]
}
于 2013-01-29T20:44:33.417 に答える
0

page1 にプロパティを追加することにより、Server.Transfer でこれを実現できます。たとえば、page_load の 2 番目のページでは:

Page1 prev = Page.PreviousPage as Page1;
if (prev != null)
{
    // access your property here and set up the page
}
于 2013-01-29T20:52:22.020 に答える
0

現在必要なものはそれ以上かもしれませんが、1 つの代替方法は、データをデータベースに保存することです。

http://msdn.microsoft.com/en-us/library/6tc47t75%28v=VS.100%29.aspx

http://www.asp.net/web-forms/videos/how-do-i/how-do-i-set-up-the-sql-membership-provider

于 2013-01-29T21:35:00.337 に答える
0

Server.Transferユーザーがそれを見ることを恐れることなく、クエリ文字列を安全に受け取ることができます。

Session使用する代わりにContext.Items

Context.Items["validationProblems"] = "...";
Server.Transfer("FixProblems.aspx");

私の他のコメントは、私の経験では、情報を収集しているのと同じフォームに検証 UI を含めておく方が「標準的」であるということです。これにより、「リアルタイム」のフィードバックが可能になります。実際には、ユーザーが何か間違ったことをしているという情報をできるだけ早くユーザーに提供する方がよいと思います。

注意してください、それは私の経験にすぎません.. それは大きな世界です.

于 2013-01-29T21:03:57.643 に答える