การควบคุมแบบไดนามิกที่มีการเขียนทับ c#

ฉันกำลังพยายามเพิ่มองค์ประกอบแบบฟอร์มแบบไดนามิกให้กับหน้า asp ของฉันโดยใช้ c# ทุกครั้งที่คลิกปุ่ม โค้ดใช้งานได้ แต่มีการเขียนทับตัวเอง แทนที่จะวางแผง ป้ายกำกับ และกล่องข้อความที่สร้างขึ้นในคลิกเดียวหลังจากองค์ประกอบที่สร้างขึ้นในการคลิกครั้งก่อน ตัวนับถูกควบคุมโดยตัวแปรโกลบอล ฉันอาจจะพลาดบางสิ่งที่เรียบง่ายไป แต่ความช่วยเหลือใด ๆ ก็จะดีมาก ขอบคุณ!

protected void Button1_Click(object sender, EventArgs e)
{

    Panel pnl = new Panel();
    pnl.ID = "Panel" + count.ToString();
    Panel1.Controls.Add(pnl);

    TextBox tb = new TextBox();
    tb.ID = "Textbox" + count.ToString();
    pnl.Controls.Add(tb);

    Label lbl = new Label();
    lbl.ID = "Label" + count.ToString();
    lbl.Text = "Label" + count.ToString();
    pnl.Controls.Add(lbl);
    count++;

}

คุณสามารถเห็นผลได้ที่นี่:

ป้อนคำอธิบายรูปภาพที่นี่


person mechanical-legs    schedule 16.01.2012    source แหล่งที่มา
comment
คุณสามารถโพสต์ภาพหน้าจอ (หรืออย่างน้อยก็ลิงก์ไปยังภาพหน้าจอ) ของสิ่งที่คุณเห็นได้หรือไม่   -  person ChrisF    schedule 17.01.2012
comment
ขอบคุณคริส นี่คือลิงก์: mechanical-legs.com/samples/cs_screen.jpg . วงกลมคือองค์ประกอบแบบฟอร์มป้ายกำกับที่อัปเดตเมื่อคลิกปุ่มแต่ละครั้ง   -  person mechanical-legs    schedule 17.01.2012
comment
ฉันคิดว่าควรมีกล่องข้อความและป้ายกำกับถัดจากขั้นตอนที่ 3   -  person ChrisF    schedule 17.01.2012
comment
ขั้นตอนที่ 1 ขั้นตอนที่ 2 และขั้นตอนที่ 3 คือลิงก์ที่ตัวช่วยสร้างแบบฟอร์มเพิ่มไว้ ขอโทษ. ฉันควรจะทำให้ asp ง่ายขึ้นก่อนที่จะโพสต์ ฉันอัปโหลดภาพหน้าจอที่เรียบง่ายในตำแหน่งเดียวกันโดยมีเพียงช่องแบบฟอร์ม ป้ายกำกับ และปุ่ม   -  person mechanical-legs    schedule 17.01.2012
comment
ลองทำ Panel1.Controls.Add(pnl); การโทรครั้งสุดท้าย   -  person Razor    schedule 17.01.2012
comment
องค์ประกอบยังคงถูกเขียนทับแม้ว่าฉันจะเพิ่มพาเนลเป็นการโทรครั้งสุดท้ายก็ตาม ฉันเรียงลำดับปัญหาโดยใช้จาวาสคริปต์ แม้ว่าฉันจะแก้ไขปัญหาโซลูชัน c# นี้ต่อไป ฉันคิดว่ามันจะมีประโยชน์มากที่จะสร้างองค์ประกอบของฟอร์มโดยใช้โค้ดที่อยู่เบื้องหลัง   -  person mechanical-legs    schedule 17.01.2012


คำตอบ (1)


ทุกครั้งที่คลิกปุ่ม คุณจะได้รับ Postback ในการโหลดเพจครั้งต่อไป asp.net ไม่มีหน่วยความจำของการควบคุมก่อนหน้านี้ที่คุณเพิ่มในตัวจัดการเหตุการณ์ คุณจะต้องติดตามสิ่งนี้ด้วยตัวเอง - ใน viewstate - และสร้างการควบคุมที่เพิ่มไว้ก่อนหน้านี้ใหม่ในเหตุการณ์ Init ของเพจโดยการซักถาม viewstate ก่อนที่จะประมวลผล postback ครั้งถัดไป หากคุณไม่สร้างสิ่งเหล่านี้ขึ้นมาใหม่ใน Init พวกมันจะทำงานไม่ถูกต้อง (เช่น พวกมันจะไม่สามารถ postback เองหรือมีส่วนสนับสนุนวงจรกิจกรรมของเพจ)

ข้อมูลเพิ่มเติมบางส่วนมีดังนี้ http://forums.asp.net/t/1186195.aspx/1

person x0n    schedule 17.01.2012