1
foreach (Control ctrl in Page.Controls) 
    {
        if (ctrl is TextBox)
        {
            if (((TextBox)(ctrl)).Text == "")
            {  
               helpCalss.MessageBox("Please fill the empty fields", this);
                    return;  
            }  
        }  
    }  

我正在使用 asp.net,我有一个带有 texboxes 的插入页面,我需要检查页面中的 texboxes 是否为空,如果是,我需要显示一个带有空文本框的消息框

4

3 回答 3

0

正如人们所指出的那样,您的方法是错误的-除非您向页面动态添加控件,否则您应该通过验证器执行验证。

下面是如何做到这一点的片段:

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))
            {

            }
        }
    }
}

在页面中使用SearchControls(this)开始搜索。

于 2012-06-28T14:18:31.117 回答
0

这是一篇很好的文章,但下面是一个修改版本,它通过给定属性收集控件

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<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
   }
}
于 2012-06-28T13:57:41.727 回答
0

我想你可以试试这个递归函数来获取页面上的所有文本框。

    /// <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);
        }
    }

OutputList 将包含所有文本框,然后您可以检查它们是否为空条件

于 2012-06-28T14:16:21.257 回答