2

私はasp.netWebフォームで作業しています。テキストボックス、コンボボックス、ラジオボタンなどのいくつかのサーバーコントロールを含むフォーム、たとえばPage1でユーザー入力を収集しています。ユーザーが保存ボタンをクリックすると、新しいページ、たとえばPage2が表示され、入力されたすべての値が確認のために表示されます。Page2は、Page1のボタンクリックイベントでServer.Transfer( "〜/ Page2")メソッドによって表示されます。Page2では、ユーザーが入力した値は、以下に示すように、PreviousPageプロパティを読み取ることによって取得されます。

var memberData = PreviousPage.dependentData;

Page2には[キャンセル]ボタンがあります。ユーザーがデータ入力エラーを見つけてPage1に戻りたい場合は、このボタンをクリックできます。[キャンセル]ボタンのクリックイベントは、クライアント側で次のコードを実行します。

if (confirm('Are you sure to leave this page?')) {
                window.history.back(1);
            }

問題は、Page1に到達すると、ユーザーが入力した値がすべて失われることです。前のページ(Page1)の値が保持されるように、これら2つのページを設計する方法を教えてください。

ありがとう

4

1 に答える 1

2

両方のページがそれらにアクセスできるように、これらの値をどこかに保存する必要があります。ほとんどの場合、これはデータベースで行われますが、必要に応じて、セッションキャッシュ、またはCookieを使用することもできます。

これはユーザー固有であるため、Sessionが最善の策だと思います。データに一致する単純なデータ構造を作成し、セッションに保存します。

public class UserData{
   public String Name {get; set;}
   public Int32 Age {get; set;}
}

次に、ユーザーがページを送信すると、次のようになります。

var userData = new UserData();
userData.Name = //Get from form;
userData.Age = //Get from form;

HttpContext.Current.Session["UserData"] = userData;

次に、他のページをロードするとき:

var userData = HttpContext.Current.Session["UserData"] as UserData;

if(userData != null){
   //Do some stuff!
}

さて...この心に注意が必要です。たとえば、ロードバランサーの背後にある複数のサーバーでこれを実行している場合は、スティッキーセッション、または少なくともある種の永続的なセッションプロバイダーを使用していることを確認する必要があります。

私が言っているのは、これをアプリに叩き込む前に宿題をすることだと思います:)

于 2013-02-19T22:26:16.023 に答える