ลบการควบคุมที่สร้างขึ้นแบบไดนามิกออกจากตรงกลางชุด

บางทีฉันอาจจะยืมปัญหา แต่ฉันได้มุ่งความสนใจไปที่การสร้างการควบคุมแบบไดนามิก ฉันกำลังสร้างแบบฟอร์มได้ทันทีที่ช่วยให้ผู้ใช้สามารถป้อนข้อมูลได้มากเท่าที่ต้องการ

ฉันมีวิธีสร้างการควบคุมโดยการคลิกปุ่ม และฉันทราบว่าตราบใดที่การควบคุมของฉันมี ID เดียวกันในแต่ละ PostBack จากนั้น ViewState จะเติมข้อมูลเหล่านั้นด้วยข้อมูลที่มีอยู่ก่อน PostBack

คำถามของฉันคือ: สมมติว่าผู้ใช้เพิ่ม 5 แถวแล้วกรอกให้ครบถ้วน ตัดสินใจลบแถวที่ 3 วิธีที่ง่ายที่สุดคือโทร parent.Controls.Remove("ID") นี่เป็นการอัปเดต ViewState เพื่อให้ฉันสามารถลดตัวนับของฉันลง 1 และกำหนดหมายเลขการควบคุมที่เหลือจาก 0 เป็น 3 ใหม่หรือฉันต้องติดตามว่าอันใดถูกลบและเก็บหมายเลข 0, 1, 3, 4 ไว้

ฉันต้องทำอะไรบางอย่างเพื่อล้างบันทึกการควบคุมที่ถูกลบของ ViewState หรือไม่


person cptully    schedule 27.10.2017    source แหล่งที่มา
comment
แทนที่จะถามคุณสามารถลองทำได้   -  person Marco Salerno    schedule 27.10.2017
comment
ยังไม่มีปัญหา ฉันกำลังลุยเข้าสู่ดินแดนใหม่สำหรับฉันและถามคำถามเพื่อทำความเข้าใจให้ดีขึ้น   -  person cptully    schedule 30.10.2017


คำตอบ (1)


เมื่อพัฒนาแอปพลิเคชัน ASP.NET Forms ตราบใดที่คุณดำเนินการภายในบริบทของเฟรมเวิร์ก ASP.NET Forms และอ็อบเจ็กต์ ระหว่าง การโหลดหน้าและโพสต์หลังคุณจะปลอดภัย แม้ว่าบางครั้งการดำเนินการโดยไม่ต้องเพิ่มโค้ดที่กำหนดเองอาจเป็นเรื่องท้าทาย การจัดการกับโค้ดด้านหลังคือจุดที่ดีที่สุดสำหรับการเพิ่มการควบคุมแบบไดนามิกให้กับเพจ

เมื่อคุณ ลบ การควบคุม ViewState ควรได้รับการอัปเดตโดยอัตโนมัติเมื่อคุณใช้เมธอด ASP.NET Forms บนตัวควบคุมโดยตรงเมื่อคุณโทร parent.Controls.Remove("ID") ในกรณีที่คุณตั้งชื่อตัวควบคุมแบบกำหนดเอง คุณจะต้องระบุรหัสหรือชื่อทั้งหมดด้วยตนเองเพื่อให้แยกกันสำหรับเพจ ดังนั้น ฉันอยู่ภายใต้สมมติฐานว่าคุณได้ตั้งชื่อตัวควบคุมแบบกำหนดเอง และรู้ว่าจะต้องใส่อะไรสำหรับ "ID" โดยทั่วไป

ViewState จะโปร่งใสสำหรับคุณเท่าที่เกี่ยวข้องกับการเขียนโค้ด บางครั้งคุณอาจพบว่าตัวเองกำลังล้าง ViewState ระหว่าง post-backs (like for a form with a password, when every visit to the page you need to clear the value) ด้วยตนเอง ViewState ยังสามารถเปิดได้ off ดังนั้นลองพิจารณาว่าแอปของคุณต้องการค่าใช้จ่ายเพิ่มเติมสำหรับ ViewState หรือไม่ ในรูปแบบไดนามิก ฉันจะพยายามอย่างเต็มที่เพื่อใช้การเพิ่มการควบคุมหรือการผูกข้อมูลกับแหล่งข้อมูลที่กำหนดเองในโค้ดที่อยู่เบื้องหลัง สาเหตุคือการลงทะเบียนสคริปต์ฝั่งไคลเอ็นต์ ดังนั้นเฟรมเวิร์ก ASP.NET Forms จึงรู้เกี่ยวกับสคริปต์ และการจัดการแอตทริบิวต์ id ที่กำหนดเองหรือรูปแบบการตั้งชื่อฝั่งไคลเอ็นต์อาจทำได้ยากในการแก้ไขหรือจัดการจาก การผูกมัด จุดยืน

ฉันได้รวมแอปพลิเคชัน ASP.NET Forms เข้ากับ AngularJS 1.6 เป็นการส่วนตัว และถึงแม้จะยากกว่า และต้องการการกำหนดค่ามากกว่า < แข็งแกร่ง>ASP.NET MVC ยังคงเป็นไปได้และเสนอวิธีที่ดีให้ฉันในการสร้างรูปแบบไดนามิกจากมือของ ASP.NET อย่างไรก็ตาม การผูกกลับไปยังค่าฟอร์มของคุณในโค้ดด้านหลังนั้นจำเป็นต้องค้นหาและดึงค่าจาก Request.Form Collection หากดำเนินการในลักษณะนี้ โดยที่ฟอร์มของคุณอยู่ภายนอก ASP.NET จะไม่มี ไม่มี ViewState สำหรับออบเจ็กต์เหล่านั้น

นี่เป็นการอัปเดต ViewState เพื่อให้ฉันสามารถลดตัวนับของฉันลง 1 และกำหนดหมายเลขการควบคุมที่เหลือจาก 0 เป็น 3 ใหม่หรือฉันต้องติดตามว่าอันใดถูกลบและเก็บหมายเลข 0, 1, 3, 4 ไว้


สำหรับกลยุทธ์ที่คุณกล่าวถึงที่นี่ ตัวอย่างโค้ดจะมีประโยชน์มากที่สุด ฉันต้องทำสมมติฐานมากมายเพื่อคาดเดาสิ่งที่อาจเกิดขึ้น ฉันบอกคุณได้เลยว่าไม่เป็นไร แต่คุณอาจยังพลาดบางสิ่งบางอย่างที่ส่งผลต่อผลลัพธ์ในผลลัพธ์ส่วนตัวของคุณ เมื่อลบแถว ระบบจะอัปเดต ViewState โดยอัตโนมัติ ในการติดตามรูปแบบการกำหนดหมายเลขของคุณสำหรับวิธีตั้งชื่อรหัสควบคุมของคุณด้วยค่าที่แตกต่างกัน ฉันจะไม่ ทิ้งช่องว่างไว้ในตัวเลขเป็นการส่วนตัว ดังนั้นให้ยึด 0 to 3 ไว้ และควรทำให้โค้ดของคุณง่ายขึ้นและคุณ จะไม่ต้องติดตามโค้ดด้านหลังมากนัก ไม่เช่นนั้นจะไม่ส่งผลต่อตรรกะการเรนเดอร์ของคุณ วิธีนี้จะทำให้การควบคุมเชื่อมโยงกลับไปยังโค้ดของคุณโดยไม่ซ้ำกันในช่วง โพสต์แบ็ค และคุณสามารถวนซ้ำผ่านคอลเลกชั่นการควบคุมได้อย่างง่ายดาย โดยไม่ต้องกังวลเรื่องรูปแบบการตั้งชื่อมากนัก

person Ryan Mauldin    schedule 27.10.2017
comment
ขอบคุณสำหรับการสนทนาโดยละเอียด! นี่เป็นความพยายามครั้งแรกของฉันในการเขียนแบบฟอร์ม ASP.Net ตั้งแต่เริ่มต้น และจากมุมมองของฉันค่อนข้างซับซ้อน ดังนั้น การอภิปรายเกี่ยวกับจุดด้อยด้านบนของคุณจึงมีประโยชน์อย่างยิ่ง! - person cptully; 27.10.2017
comment
ไม่มีปัญหา โปรดโหวตคำตอบถ้ามันตรงกับความต้องการของคุณ ฉันต้องการคะแนนประสบการณ์เนื่องจากบัญชีของฉันยังใหม่ :) หรือแจ้งให้เราทราบว่าฉันสามารถตอบเพิ่มเติมได้อย่างไร - person Ryan Mauldin; 27.10.2017
comment
@cptully หากคุณ ใหม่ ถึง แบบฟอร์ม ASP.NET และไม่มีความต้องการเฉพาะหรือแอปพลิเคชันที่มีอยู่ซึ่งใช้ แบบฟอร์ม ASP.NET ในการทำงาน ฉันจะใช้เวลาเรียนรู้ ASP.NET MVC แทน การเชื่อมโยงข้อมูลกับออบเจ็กต์ โมเดล และการไม่มี ViewState ทั้งหมดที่ต้องกังวลนั้นสมเหตุสมผลอย่างมากเมื่อเทียบกับ ฟอร์ม นอกจากนี้ อุตสาหกรรมยังนำ ASP.NET MVC มาใช้สำหรับแอปพลิเคชันรุ่นใหม่อีกด้วย แบบฟอร์มเป็นแบบเดิมมากขึ้นในปัจจุบัน - person Ryan Mauldin; 27.10.2017
comment
ฉันได้ศึกษา MVC ใน Java โดยใช้ Spring ดังนั้นฉันจึงพอใจกับ MVC แต่ฉันมีความต้องการเฉพาะสำหรับแบบฟอร์ม ASP.Net ฉันได้เข้ามาดูแลเว็บไซต์ที่ใช้แบบฟอร์มรุ่นเก่าแล้ว ขอบคุณสำหรับคำแนะนำนะ - person cptully; 30.10.2017
comment
กล่าวว่า: เท่าที่กลยุทธ์ที่คุณกล่าวถึงที่นี่ ตัวอย่างโค้ดจะมีประโยชน์มากที่สุด และฉันเห็นด้วย! หากฉันประสบปัญหา ฉันจะโพสต์คำถามใหม่พร้อมรายละเอียดเฉพาะของโค้ดและปัญหาที่เกิดขึ้น - person cptully; 30.10.2017