2012-01-26 9 views
1

私はこれを実現する方法を探していましたが、解決策を見つけることができませんでした。あなたのようダイナミックに作成された子で更新パネル内の動的コントロールを更新する

 public partial class _Default : System.Web.UI.Page 
    { 
      protected string TextToShow 
      { 
       get 
       { 
       return Session["TextToShow"] == null ? "Original Text" : 
                 Session["TextToShow"].ToString(); 
       } 
       set { Session["TextToShow"] = value; } 
      } 

      protected void Page_Init(object sender, EventArgs e) 
      { 
      var lblToChange = new Label 
          { 
           ID = "lblToChange", 
           Text = TextToShow 
          }; 

      var chkChangeText = new CheckBox 
          { 
           ID = "btnChangeText", 
           Text = "Change Text", 
           AutoPostBack = true 
          }; 
      chkChangeText.CheckedChanged += ChkChangeTextClick; 

      PlaceHolder.Controls.Add(lblToChange); 
      PlaceHolder.Controls.Add(chkChangeText); 
     } 

     private void ChkChangeTextClick(object sender, EventArgs e) 
     { 
      var check = (CheckBox) sender; 

      TextToShow = check.Checked ? "Text Changed" : "Original Text"; 
      udpDynamicControls.Update(); 
     } 


     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     } 

:背後

 <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="udpDynamicControls" UpdateMode="Conditional" runat="server"> 
     <ContentTemplate> 
      <asp:PlaceHolder ID="PlaceHolder" runat="server"> 
      </asp:PlaceHolder> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

、コードで:私が持っている.aspxのでは

:私は、私は次のようにこれを達成するために持っている私の元のプロジェクトから、問題を単純化チェックボックスが変更されたときにラベルを更新するために何をしようとしているのかを見ることができます。しかし、udpDynamicControls.Update();それが新しい値をとるpage_initイベントは発生しません。私はすでに同様の質問をチェックアウトしましたが、これは別のシナリオだと思います。

私は非常に助けてくれる人には感謝します。悪い英語をお詫びします。

+0

更新プログラムパネルを使用しないでこの機能を実現するには他の方法がありますが、ブラウザでのポーズバックは避けてください。乾杯。 –

答えて

0

私のオリジナルプロジェクトの問題は他の方法で解決しましたが、誰かが同じ問題を抱えている場合の答えを投稿することもできます。

私は、コントロールの新しい値を更新するためだけに更新後に再度実行するためにpage_initに依存していましたが、これはハッピングではありませんでした。可能な解決策は、チェックボックスのコントロールの値を更新することですラベルがすでに作成されており、次のページのライフサイクル実行では、その値が保持されます。

 protected void ChkChangeTextClick(object sender, EventArgs e) 
     { 
     var check = (CheckBox) sender; 

     TextToShow = check.Checked ? "Text Changed" : "Original Text"; 
     ((Label) PlaceHolder.FindControl("lblToChange")).Text = TextToShow; 

     } 

は交換::

 udpDynamicControls.Update(); 

について:

 ((Label) PlaceHolder.FindControl("lblToChange")).Text = TextToShow; 

はそれについて考えるために来る

は、だから私は変更さ唯一の事はChkChangeTextClickイベントと最終的な結果がありました、私の元のプロジェクトでは、私はいくつかの動的なコントロールがあり、私はちょうどパターンを設定自分のコントロールのIDで必要なものを見つけて値を変更します。コントロールのイベントは失われず、ブラウザのポストバックなしに更新された情報を表示できます。

私はこれですべての髪を裂いたので、これは将来誰にでも役立つことを願っています。