/ / मैं कस्टम TextControl के अंदर सभी TextBox कैसे प्राप्त कर सकता हूं? - c #, asp.net, उपयोगकर्ता-नियंत्रण

मैं कस्टम UserControl के अंदर सभी टेक्स्टबॉक्स कैसे प्राप्त कर सकता हूं? - सी #, एएसपीनेट, उपयोगकर्ता नियंत्रण

मुझे ASP.net WebForms, server-side में एक कस्टम UserContorl के अंदर सभी TextBoxes को गतिशील रूप से इकट्ठा करने का एक तरीका चाहिए

मैंने सोचा कि यह काम करेगा:

foreach (var control in Page.Controls)
{
var textBox = control as TextBox;
if (textBox != null && textBox.MaxLength > 0)
{
// stuff here
}
}

लेकिन यह नहीं है "मैं क्या सोचा था कि यह करना है, और मैं डॉन" टी कि कैसे और अधिक जानकारी प्राप्त करने के लिए देखते हैं।

इसलिए, मैं ASP.net वेबफ़ॉर्म में कस्टम टेक्स्टकंट्रोल के सर्वर-साइड पर सभी टेक्स्टबॉक्स को गतिशील रूप से कैसे प्राप्त कर सकता हूं?

उत्तर:

जवाब के लिए 3 № 1

आपको एक पुनरावर्ती विधि की आवश्यकता है, क्योंकि सभी स्तर 1 बच्चे आवश्यक रूप से टेक्स्ट बॉक्स नहीं हैं (आपके उपयोगकर्ता नियंत्रण में नियंत्रण / कंटेनर पदानुक्रम पर निर्भर करता है):

private IEnumerable<TextBox> FindControls(ControlCollection controls)
{
List<TextBox> results = new List<TextBox>();
foreach(var control in controls)
{
var textBox = control as TextBox;
if (textBox != null && textBox.MaxLength > 0)
{
results.Add(textBox);
}
else if(textBox == null)
{
results.AddRange(FindControls(control.Controls));
}
}

return results;
}

परिणाम प्राप्त करने के बाद आप उन्हें पुन: व्यवस्थित कर सकते हैं और आपको जो कुछ भी करने की आवश्यकता है वह कर सकते हैं।


जवाब के लिए 0 № 2

लगता है पुनरावर्ती जाने के लिए रास्ता है:

foreach (Control control in Page.Controls)
{
DoSomething(control);
}

// And you need a new method to loop through the children
private void DoSomething(Control control)
{
if (control.HasControls())
{
foreach(Control c in control.Controls)
{
DoSomething(c);
}
}
else
{
var textBox = control as TextBox;
if (textBox != null)
{
// Do stuff here
}
}
}