2011-12-08 30 views
1
this.Controls.Add(new CheckBox{ Checked = true; }) 

page_loadにこれを追加します。それは動作し、チェックボックスが追加され、表示されます。動的ラジオボタン値の取得

少し異なるアプローチ:

var button = new CheckBox{ Checked = true; } 
globals.button = button; 
this.Controls.Add(button); 

グローバルは、私はそれがボタンを押した後のデータだ取り出すのを期待してチェックボックスを設定するには、チェックボックスのプロパティを持つクラスです。ボタンが押されたときに

public static CheckBox button { get; set; } 

しかし、コントロールが私の画面の消えたと私のグローバルクラスのボタンは、私がチェックボックスに行った変更で更新されていません。

button.clickイベントを実行すると、チェックボックスのチェック状態を変更し、現在の状態をキャッチする方法を教えてください。

答えて

1

すべてのポストバックに対して動的コントロールを再作成する必要があります。すべてのリクエストがPageクラスの新しいインスタンスであるため、魔法のように再表示されることはありません。

この件に関する私のpreviousの投稿を参照してください。ユーザーコントロールを使用していますが、アイデアはまったく同じです。

And another

私は通常、オーバーライドさCreateChildControlsでそれを行うが、一部の人々はPage_Initを使用をPage_Load

前に、コントロールを追加する必要があります。

これは、ボタンがクリックされたときの状態/値を保持し、動的にチェックボックスを追加するための非常に単純な方法であり、this article

更新

参照してください。ダイナミックコントロールがPage_Load(object sender, EventArgs e)方法で作成されている場合

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:PlaceHolder runat="server" ID="ph"></asp:PlaceHolder> 
     <asp:Button OnClick="btn_Click" runat="server" ID="btn" Text="Click Me" /> 

     <asp:Label runat="server" ID="lbl"></asp:Label> 
    </form> 
</body> 
</html> 

その後コードは

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 


public partial class Test : Page 
{ 
    private CheckBox MyCheckBox { get; set; } 
    protected override void CreateChildControls() 
    { 

     this.MyCheckBox = new CheckBox() { Checked = true }; 
     this.ph.Controls.Add(this.MyCheckBox); 
     base.CreateChildControls(); 
    } 

    protected void btn_Click(object sender, EventArgs e) 
    { 
     var someValue = this.MyCheckBox.Checked; 
     this.lbl.Text = someValue ? "Checked" : "Not Checked"; 
    } 

} 
+0

再びコントロールを追加することが問題ではありません助けるべきPage_Load(object sender, EventArgs e)方法でコントロールを作成する必要がある場合。ボタンをクリックして値を変更したときの値を取得することが私の問題です。 –

+0

あなたは 'しかし、ボタンを押すとコントロールが画面から消えてしまいました。 ' - これは、各ポストバックでコントロールを再追加しなかったことを示します。追加しないと、値を取得できません。 –

+0

globalsクラスで設定されたチェックボックスからの値。 –

0

背後に、彼らは、ユーザーが行った変更を返しません。

問題が発生する理由は、Page_Load(object sender, EventArgs e)メソッドが呼び出される前にASP.Netビューステートが作成されているためです。 ASP.Netビューの状態は、ページ上のコントロールとその値を保持します。 Page_Init(object sender, EventArgs e)メソッドは、ASP.Netビューステートが作成される前に呼び出されます。 Page_Init(object sender, EventArgs e)メソッドでコントロールを作成すると、ユーザーが入力した内容が返されます。また、ページがポストバックでない場合は、コントロールを作成する必要があります。

何らかの理由でPage_Init(object sender, EventArgs e)メソッドでコントロールを作成できない場合は、編集してASP.Netビューの状態をPage_Load(object sender, EventArgs e)に変更します。

この質問はHow to Persist Variable on Postback

関連する問題