Showing the Control Tree – हम पिछले Example Code के अनुसार अपनी Code-Behind File में लिखे गए Content को निम्नानुसार Modify भी कर सकते हैं, ताकि हमारा Modified Code इस बात को भी Check कर सके कि हमारे Webpage पर कोई Literal Control Exist है या नहीं और यदि है, तो उस Control Object को LiteralControl की तरह Cast करके उसके Text को Extract किया जाता है।
[code] File Name: Default.aspx.cs using System; using System.Web.UI; namespace WebForms { public partial class Default : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { foreach (Control control in Page.Controls) { Response.Write(control.GetType().ToString() + " - <b>" + control.ID + "</b><br />"); if (control isLiteralControl) { // Display the literal content (whitespace and all).string text = ((LiteralControl)control).Text; Response.Write("*** Text: " + Server.htmlEnCode(text) + "<br />"); } } Response.Write("<hr />"); } } } [/code]
इस Output में हमें जो Text दिखाई दे रहा है, वह HTML-EnCoded String है, जिसे Server.htmlEnCode() Method द्वारा Render किया गया है। ये Method हमें Render होने वाले Content को Text की तरह Display करता है, जो कि Render होने वाले Resultant HTML का Source Code होता है।
हालांकि इस Code-Behind File में अभी भी कुछ कमी है। क्योंकि अब हम ये तो जानते हैं कि Webpage की Parsing के दौरान ASP.NET Server के LiteralControl Object में क्या Content होता है, लेकिन अभी भी इस Page के सभी Controls की Information हमें Output के रूप में दिखाई नहीं दे रही है।
इस Missing Content को समझने के लिए हमें हमारे Page के विभिन्न Controls की Hierarchy को समझना होxkAASP.NET हमेंशा Controls के केवल Top-Level को ही Render करता है। यदि इन Top-Level Controls में अन्य Child-Controls हों, तो वे उनके स्वयं के Controls की Properties Provide करते हैं, जिनके माध्यम से उन Child-Controls को भी Access किया जा सकता है।
हमारे Example Page में सभी अन्य Pages की तरह ही सभी Controls <form> Element के बीच Enclosed हैं। इसका मतलब ये हुआ कि यदि हम हमारे Page के Server-Side Controls की Information प्राप्त करना चाहें, तो हमें htmlForm ClassकेControls Collectionको Inspect करना होता है।
चूंकि किसी Page पर कोई भी Control किसी भी अन्य Control को Child की तरह Contain कर सकता है और ये Nesting कई Levels की हो सकती है। इसलिए किसी Page के सभी Levels व उन सभी Levels के सभी Controls का पता लगा कर ही हम किसी Page के सभी Controls को Access व Manipulate कर सकते हैं।
इसलिए समस्या के समाधान के रूप में यानी Page के सभी Controls को Access व Manipulate करने के लिए हम एक Recursive Routine यानी Method Create कर सकते हैं, जो कि हमारे Page के Controls की Entire Tree को Traverse कर सकता है। यानी हम हमारी इस जरूरत को पूरा करने के लिए अपनी Code-Behind File को निम्नानुसार Modify कर सकते हैं:
[code] File Name: Default.aspx.cs using System; using System.Web.UI; namespace WebForms { public partial class Default : System.Web.UI.Page { protectedvoid Page_Load(object sender, System.EventArgs e) { // Start examining all the controls. DisplayControl(Page.Controls, 0); // Add the closing horizontal line. Response.Write("<hr />"); } private void DisplayControl(ControlCollection controls, int depth) { foreach (Control control in controls) { // Use the depth parameter to indent the control tree. Response.Write(newString('-', depth * 4) + "> "); // Display this control. Response.Write(control.GetType().ToString() + " - <b>" + control.ID + "</b><br />"); if (control.Controls != null) { DisplayControl(control.Controls, depth + 1); } } } } } [/code]
जब हम उपरोक्तानुसार अपनी Code-Behind File को Modify करके अपने Webpage को Run करते हैं, तो इस बार हमें निम्नानुसार Output Page प्राप्त होता है, जिस पर Page के सभी Controls की Information होती है:
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Core ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Core ASP.NET WebForms in Hindi | Page:647 | Format: PDF