2012-05-10 19 views
1

これは基本的な問題のようですが、私は困惑しています。.ascx内のコントロールはポストバックに新しい値を表示していません

page_loadにカスタムコントロール(.ascx)を読み込むメインページがあります。

このカスタムコントロールには2つのフィールドがあります。そのうちの1つはドロップダウンリストで、もう1つはテキストボックスです。ドロップダウンリストが値を変更すると、ポストバックがトリガーされ、いくつかのロジックがサーバー側で実行され、テキストボックスの値が生成されます。コードを踏んで、値が正しく作成され、割り当てられました。ただし、ページがレンダリングされるとき、値は変更されません。

テキストボックスの値を "QQQ"に変更してポストバックをトリガーすると、 "QQQ"がテキストボックスに残り、viewstateが動作していることを確認できます。

ポストバック時に生成された値がフォームに表示されない理由はありますか。このプロセスは最初のページの読み込みで正常に動作します。

.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    string ascxPath = @"~/_CONTROLTEMPLATES/TRC_BITS.ascx"; 
    TRC_BITS control = Page.LoadControl(ascxPath) as TRC_BITS; 
    phForm.Controls.Add(control); 
} 

た.ascx

<asp:TextBox ID="message" runat="server" TextMode="MultiLine" /><br/> 
    <asp:DropDownList ID="year" runat="server" AutoPostBack="true"> 
     <asp:ListItem Text="2011">2011</asp:ListItem> 
     <asp:ListItem Text="2012">2012</asp:ListItem> 
     <asp:ListItem Text="2013">2013</asp:ListItem> 
    </asp:DropDownList> 

.ascx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     year.SelectedValue = DateTime.Now.Year.ToString(); 
    } 
    if (year.SelectedValue == 2012) 
     message.Text = "ABC"; 
    else 
     message.Text = "XYZ"; 
} 

答えて

2

コントロールを動的に追加するため、ページのoninitイベント中にコントロールを追加する必要があります。 試してみてください。頑張れ。ヤラ

+0

これは完全な答えではありません。実装によっては、動作しても動作しなくてもかまいません。 –

+1

ありがとうhabibi。それがそれでした。 – RWL01

4

あなたはこれらの詐欺を追加しているので動的にページに移動するには、ユーザーコントロールにIDを割り当てる必要があります。ページが転記されるたびに、コントロールに同じIDを割り当てて、ViewStateからフィールドが再投入されるようにしてください。

Page_Loadの代わりにOnInitの間にコントロールをロードすると、Shaiが示唆したように、より適切なことが示唆されています。状況はユーザーコントロールによって少し異なりますが、一般的にはLoadViewStateメソッドが実行される前に動的コンテンツを追加する必要があります。

enter image description here

あなたは動的なコンテンツを永続化のうち、痛みを取るために何かを探しているなら、私はDynamicControlsPlaceHolder見てみることをお勧め。

+0

IDは.NET Frameworkによって自動的に割り当てられます。 –

+0

@ShaiCohen:はい、しかし、生成されたIDは、フォームがより多くのコントロールがフォームに追加されたときに変化する可能性があります。 –

関連する問題