2012-02-13 1 views
1

誰かが私を助けてくれるかもしれません。私は簡単なWebユーザーコントロール、日付と時刻のピッカー、私のwebformにドロップするように作成しました。これはすべてうまく動作し、私はプロパティを設定することができ、UIなどのためにコントロールを満足に使用することができます。Webユーザーコントロールの永続プロパティ(viewstate、session、context)

コントロールselected_date_timeプロパティを「使用」するときは、何も私は研究し、視聴者、文脈、セッションを使用して無限に試しました。 Onbiouoslyセッションは機能しますが、汚いです。このコントロール(開始時刻と終了時刻)の2つのコピーを使用していますので、セッション変数を実際にハックして作業を行う必要があります。

何か不足していますか?コントロールは何かが起こるたびに初期化され、明らかに状態情報を失います。私は日付を選択し、ラベルにその日付を書いて、それが持続するので、その状態を維持する。しかし、コントロールのプロパティにアクセスして、選択した日付と時刻の組み合わせを取得しようとすると(それは既に視覚的に持続しています)、その何もありません。私はデバッグし、私はページ上の投稿の任意のフォームを行うたびに初期化されます。

誰かが私のためにこれにいくつかの光を当てることができますか?本当に今、問題になっています。

ありがとうございます。

例:(簡単なコンポーネント)

UC _ save_method

ViewState("var_time") = "My veiwstate text" 

フォームは

dim str as string = ViewState("var_time") 

フォームは、ビューステートvarには何も見ない_read_method。

私は通常のプロパティと値でそれを試してみましたが、これは動作しませんでした。これが私のプロパティのvarを見るために移動した理由です。今、私はviewstateをプロパティなしでも動作させるようにしようとしています。

私のフォームに見えますが、コントロールには2つの独立したビューステートが必要ですか?私はviewstatesに関するn00bのビットです。

おかげ

[ソリューション] あなたが明示的にコントロールのprerenderメソッドであなたのプロパティをリセットする必要があります。私の誤解は、ページとコントロールが同じ単一のビューステートを共有するということでした。コントロールとそのページが独立したビューステートを持ちます。

コントロールのプロパティセット関数では、ビューステートで値を設定し、プリレンダリング時にそのviewstate値を取得し、プロパティget variable = - viewstateの値を設定します。

すべてが正常であったと世界が終了されていないかのようにあなたが今、あなたのページからプロパティにアクセスすることができます... pheww

おかげで私を導くためのcnayします。おそらく、

'Usr control xyz

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

my_time = ViewState("var_time") 'my_time is the get variable for property date_time

End Sub

'page use

xyz.date_time

+0

私たちはあなたを助けるためにさらに情報が必要です。あなたはコードを投稿できますか?例を表示しますか? –

+0

こんにちは、私は例と追加しました –

答えて

2

、あなたはより良い答えを得るが、一般的な言葉で話すための完全な制御コードを投稿する必要があります - ビューステート(または状態を制御する)ような特性などの制御状態を持続するために一般的に正しいアプローチです。各制御インスタンスは異なるビューステートバッグを取得し、したがって衝突は容易に回避されます。

一般的な編集可能なコントロールは、まずビュー状態から状態を復元し、要求データを使用して必要に応じて状態を変更します。たとえば、単純なテキストボックスコントロールは、そのテキスト値をビューステートに維持します。ポストバックでは、テキスト値がビューステートから復元され、要求に存在する値によって上書きされます(UniqueIDプロパティで参照)。

ユーザーコントロールの場合、通常、子コントロールの値(またはプロパティ)を使用してコントロールの値/プロパティを取得できます。そのため、ビューステートは使用できません。ただし、子コントロールによってバックアップされていないプロパティ/状態を追加した場合は、ビューステートでバックアップする必要があります。つまり、ユーザーコントロールに2つの子コントロールがあるとしましょう.1つは日付用、もう1つは子フィールドコントロールの値を組み合わせてコントロールの日付/時刻値を取得できます。

+0

よ、お返事ありがとうございます。私はどこに行方不明があるのか​​知っていると思う。初期化されたコントロールのプロパティを "復元する"ことは絶対にない。それは私の問題かもしれません。それはprerender、プロパティ= viewstateと同じくらい簡単ですか?そして、私のフォームでプロパティにアクセスしますか? –

+0

ありがとう、これはmwのためにそれをしました。見て、ビューステートに関する私の教育に小さなギャップがあった:-)。その哀れみは、明示的にどこにでも言及されていない、私はviewstate上の20の記事/記事を通して読まなければならず、誰も明示的にこれを示していない。 Protected Sub Page_PreRender(ByVal送信者As Object、ByVal e As System.EventArgs)Me.PreRenderを処理します。 my_time = ViewState( "var_time") End Sub –

+0

私はソリューションを追加しています –