2012-01-22 9 views
2

これは簡単な問題かもしれないが、ASP.net(C#)の新機能であり、私は「ライド」オブジェクトを渡すメソッドに問題があるLINQからエンティティへのステートメントを使用してSQLデータベースにアクセスします。別のグローバル変数をRide.identity属性の値(これは長い)に設定しようとしますが、次のメソッドではこの値を使用しようとすると新しい値が保持されません。何かご意見は?私がこの変数を再初期化する行方不明のポストバックがある場合、それを保存する方法はありますか?ありがとう。リクエスト間で変数を持続する

private void displayRide(Ride ride, int carNum) 
{ 
    if (ride != null) 
    { 
     ride.AssignedCar = carNum; 
     ride.Status = "EnRoute"; 
     id_ridePendingConfirm = ride.identity; //<----THE PROBLEM IS HERE! 
     myEntities.SaveChanges(); 

     RideToAssignDV.DataSource = new List<Ride> {ride}; 
     RideToAssignDV.DataBind();      
    } 
    else 
    { 
     //TODO: Redirect to error.aspx 
     RideToAssignDV.DataSource = null; 
     RideToAssignDV.DataBind(); 
    } 
} 
+1

ASP.NETページのライフサイクルを理解する必要があります。ページクラスの新しいインスタンスが各リクエストで作成され、各リクエストの最後に破棄されます。 –

答えて

6

ViewStateに値を格納します。たとえば:

id_ridePendingConfirm = (long)ViewState["RideId"]; 

をしかし、注意してください:

ViewState["RideId"] = ride.identity; 

あなたが行くと、あなたのコードの行でそれを使用し、あなたはこれを行う必要があります。 ViewState [key]はオブジェクトを返すので、null参照でないことを確認する必要があります。そうしないと、InvalidCastExceptionが返されます。次のように私は通常、この値を格納し、ViewStateにそれを持続する保護されたプロパティを作成するには、以下の経験と私の同僚に教え

protected const string RideIdViewStateKey = "CurrentRideId"; 

protected long CurrentRideId 
{ 
    get 
    { 
     object o = ViewState[RideIdViewStateKey]; 
     return (null == o)? -1 : (long)o; 
    } 

    set 
    { 
     ViewState[RideIdViewStateKey] = value; 
    } 
} 

を次に、あなたのコード内で、次の操作を行います。

// Assignment before postback so that you can preserve the state: 
CurrentRideId = ride.identity; 

// After postback in the method you have above: 
id_ridePendingConfirm = CurrentRideId; 

ライドIDが利用できないときにコードが何をすべきかわからないので、私は-1と決めましたが、実際にコードに必要なものによって異なります。

シナリオのセッション状態は、ユーザーのセッションの全期間ではなく、ページポストバック間で持続する必要があるため、推奨しません。 ViewStateに格納する情報の量は、悪用される可能性があるため注意が必要です。 ViewStateのとセッション状態の詳細については

は、以下を参照してください。

+1

優れた説明をいただきありがとうございます、私はそれがポストバックで破壊されていると考えましたが、それをどのように保存するのかは分かりませんでした。 (: – SHeinema

2

変数とフィールドはポストバック間で持続しません。

セッション状態を使用する必要があります。

2

の実行の間でデータを格納する複数の方法についてthis question and my answerを参照してくださいにパグe。要するに、ポストバックの間に値を格納する必要があります。 ASP.NET(一般に.NET)では、さまざまなツールが用意されていますが、リクエスト間で自動的に何も実行されません。ページは、リクエストごとに作成、実行、破棄されます。

関連する問題