C# 如何使用for循环扫描ASP.NET页面中的所有控件?
我正在使用asp.net,我有一个带有文本框的插入页面,我需要检查页面中的文本框是否为空,如果是,我需要显示一个带有空文本框的消息框C# 如何使用for循环扫描ASP.NET页面中的所有控件?,c#,asp.net,servercontrols,C#,Asp.net,Servercontrols,我正在使用asp.net,我有一个带有文本框的插入页面,我需要检查页面中的文本框是否为空,如果是,我需要显示一个带有空文本框的消息框 foreach (Control ctrl in Page.Controls) { if (ctrl is TextBox) { if (((TextBox)(ctrl)).Text == "") { helpCalss.MessageBox
foreach (Control ctrl in Page.Controls)
{
if (ctrl is TextBox)
{
if (((TextBox)(ctrl)).Text == "")
{
helpCalss.MessageBox("Please fill the empty fields", this);
return;
}
}
}
公共列表ListControlCollections(页面,字符串propertyName)
{
列表控制器=新列表();
AddControls(page.Form.Controls、controlList、propertyName);
返回控制器;
}
私有void AddControls(ControlCollection ControlCollection、列表控制器、字符串propertyName)
{
foreach(controlCollection中的控件c){
PropertyInfo propertyToFind=c.GetType().GetProperty(propertyName);
if(propertyToFind!=null){
添加(c);
}
if(c.HasControls()){
AddControls(c.Controls、controlList、propertyName);
}
}
}
要使用它:
public List<Control> ListControlCollections(Page page, string propertyName)
{
List<Control> controlList = new List<Control>();
AddControls(page.Form.Controls, controlList, propertyName);
return controlList;
}
private void AddControls(ControlCollection controlCollection, List<Control> controlList, string propertyName)
{
foreach (Control c in controlCollection) {
PropertyInfo propertyToFind = c.GetType().GetProperty(propertyName);
if (propertyToFind != null) {
controlList.Add(c);
}
if (c.HasControls()) {
AddControls(c.Controls, controlList, propertyName);
}
}
}
List controlList=ListControlCollections(“文本”);
对于(i=0;i
我想你可以试试这个递归函数来获取页面上的所有文本框
List<Control> controlList = ListControlCollections("Text");
for (i=0; i < controlList.length; i++)
{
if (controlList[i].Text == string.empty)
{
// Do your logic here
}
else
{
// Do your logic here
}
}
//
///在用户控件的控件集合中递归查找文本框
///
///
///
///
私有void FindControlRecursiveByType(ControlCollection控件,ref List OutputList)
{
foreach(controls.OfType()中的WebControl控件)
{
如果(控件为文本框)
添加(控件作为文本框);
如果(control.Controls.Count>0)
FindControlRecursiveByType(control.Controls,ref OutputList);
}
}
OutputList将包含所有文本框,然后您可以检查它们是否存在空条件正如人们指出的那样,您的方法是错误的-除非您在页面中动态添加控件,否则您应该通过验证器执行验证 下面是一段如何做到这一点的片段:
/// <summary>
/// Find TextBoxes Recursively in the User control's control collection
/// </summary>
/// <param name="controls"></param>
/// <param name="type"></param>
/// <returns></returns>
private void FindControlRecursiveByType(ControlCollection controls, ref List<TextBox> OutputList)
{
foreach (WebControl control in controls.OfType<WebControl>())
{
if (control is TextBox)
OutputList.Add(control as TextBox);
if (control.Controls.Count > 0)
FindControlRecursiveByType(control.Controls, ref OutputList);
}
}
在页面中使用
SearchControls(this)
开始搜索。尝试使用Validation
控件(客户端和服务器端)或JavaScript
(jQuery)来验证用户输入。您没有显示任何实际的消息框吗?这将在部署时导致各种问题。相关:@AVD我已经尝试使用javascript,但问题是我有一个母版页和内容页,因此id不同,当我使用clientid Proerti时javascript代码不起作用。我需要循环页面中的所有控件,如果它的类型是textbox,我需要检查它是否正确是否为空,如果为空,则会出现一个带有空文本框的消息框,并回滚以将文本放入空文本框。感谢您的代码,但它将如何帮助我解决此问题?我更新了答案。上面的代码将收集页面上的所有控件。一旦你有了所有的控件,你就可以在它们之间循环并检查它们的所有值。它在您的情况下非常有用。@OmniaElshazly-您可以在JavaScript/jQuery中设置并控制.ClientID以引用服务器控件的id。
private void SearchControls(Control controlSearch)
{
foreach (Control control in controlSearch.Controls)
{
if (control != null)
{
if (control.Controls != null & control.Controls.Count > 0)
{
SearchControls(control, form);
}
TextBox textbox = control as TextBox;
if (textbox != null && string.IsNullOrEmpty(textbox.Text))
{
}
}
}
}