2011-10-25 5 views
0

テキストボックスとラジオボックスを使用してページにカスタムユーザーコントロールを追加しますが、各ポストバック後にコンテンツが削除され、入力された値を読み取る方法がわかりません。カスタムユーザーコントロールの状態を読み取る

私が知ったことから、リフレッシュごとにユーザーコントロールを追加する必要がありますが、その状態は復元されません。値をViewStateに保存したいのですが、それは何らかの理由で発生しません。

注:1つのページに複数のユーザーコントロールを追加する必要があるため、各ユーザーコントロールをトラフIDまたはそのユーザーコントロールを選択するlinq式で識別する必要があります。

私は私のユーザーコントロールを追加する方法C#4.0

とイムプログラミング:

private void AddInstrumentDetailToPage() 
    { 
     RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx"); 
     InstrumentDetail.Controls.Add(lItem); 
    } 

私はViewStateに持つコントロールの量を保存し、(AddInstrumentDetailを呼び出す)倍の量が、彼らは空に見えます。ビューステートはまだ初期化されていないので、Page_Initに追加する必要がありますが、どちらも役に立ちません。

+0

どのようにユーザーコントロールを追加していますか?それはaspxコードでそれを追加することは可能ですか? –

答えて

1

ViewStateを維持するには、遅くとも動的に追加された(ユーザー)コントロールをPage_Loadに再作成する必要があります。したがって、既に追加されたコントロールの数をViewState-Propertyに保存し、それに応じてPage_Loadにリロードしてください。この変数をAddInstrumentDetailToPageの1で要約する必要があります。 ViewStateは、変数がまだそこに再ロードされていないため

MSDN: Dynamically Adding User Controls

あなたがのViewState変数に追加したコントロールの数を保存する場合は、ページのInitイベントでコントロールを再作成することはできません。

+0

私はViewStateに持っているコントロールの量を保存し、その時間分AddInstrumentDetail()を呼び出しますが、空であるように見えます。ビューステートはまだ初期化されていないので、Page_Initに追加する必要がありますが、どちらも役に立ちません。 – NomenNescio

+0

ああ!私はPage_Initにコントロールを追加する必要がありますが、追加する必要があることをどのように知っていますか? querystringなどで保存できますか? – NomenNescio

+0

Page_Loadで十分である可能性があります(追加されたコントロールの数を格納するためにViewState変数を使用する利点があります)。それが十分であるかどうかを見るために次の記事を見てください:http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic4または私の別のanwerは、同様の質問:http://stackoverflow.com/questions/5046101 /動的に作成されたコントロールが消されてボタンを押したままにする/ 5046162#5046162 –

1

PostBackを作成しない限り、ControlStateはありません。ブラウザをリフレッシュする/同じリンクをリクエストするだけで新鮮なスタートになります。デフォルトでは

、自分のページに追加したcontrolは、あなたのUserControlためViewStateControlStateに格納されたデータです。

内容を保存したい場合は、Request.Session.Add("yourKey", "yourValue")に保存することをおすすめします。

protected void Page_Load(object sender, EventArgs e)メソッドでは、var yourValue = Request.Session["yourKey"];でセッションにアクセスできます。

RMAItemインスタンスのIDを指定してください。そうでなければ、データをControlStateに保存すると機能しない可能性があります。

private void AddInstrumentDetailToPage() 
{ 
    RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx"); 
    lItem.ID = "rmaItem1"; //<-- This is important 
    InstrumentDetail.Controls.Add(lItem); 
} 

希望します。

関連する問題