public partial class Default2 : System.Web.UI.Page
{
Dictionary<int, Button> btnsDic = new Dictionary<int, Button>();
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
for (int i = 0; i < 2; i++)
{
Button newBtn = new Button();
newBtn.CommandName = i.ToString();
newBtn.Text = i.ToString();
newBtn.Command += Clicked;
btnsDic.Add(i, newBtn);
PlaceHolder p = new PlaceHolder();
PlaceHolder1.Controls.Add(newBtn);
// p.Controls.Add(newBtn);
}
}
else
{
Button dsa = new Button();
dsa.Text = "This medsa";
PlaceHolder1.Controls.Add(dsa);
}
}
void Clicked(object sender, CommandEventArgs e)
{
foreach (var item in btnsDic)
{
if (e.CommandName==item.Key.ToString())
{
Label lebl = new Label();
lebl.Text="Button number: "+e.CommandName+" was pressed";
this.Controls.Add(lebl);
}
}
}
}
私はプログラム的に私のプレースホルダを作るのではなく、ポストバック後にページに表示されますtags..nothingの形で私のWebフォーム上に存在するプレースホルダを使用する場合、なぜ質問:「
?
はなぜ詳細については、私はすでにページ上に存在するコントロールに追加する必要がありますか?そうでなければうまくいきませんか? – Matrix001
@ Matrix001 - ASP.NETライフサイクルのレンダリングフェーズが実行されると、コントロールチェーンが実行され、レンダーが呼び出されます。コードの背後に作成されたコントロールをチェーン内のコントロールに追加しないと、ツリーが反復されたときにコントロールが検出されません。 さらに明らかにエンジンは、プログラム上作成されたコントロールをページ上のどこに配置したいのか分からないため、必要な場所に配置する必要があります。 – NerdFury