循环遍历asp.net网页上的所有控件

2024-03-07

我需要循环遍历我的 asp.net 网页中的所有控件并对控件执行一些操作。在一个例子中,我从页面中制作了一个巨大的字符串,并将其通过电子邮件发送给自己,而在另一种情况下,我将所有内容保存到 cookie 中。

问题在于母版页和其中包含控件集合的项目。我希望能够将 Page 传递给该方法,然后让该方法足够通用,以便循环遍历最内部内容页面中的所有控件并使用它们。我尝试过用递归来做到这一点,但我的递归不完整。

我想将 Page 对象传递给方法,并让该方法循环遍历最里面的内容页面中的所有控件。我怎样才能实现这个目标?

    private static String controlToString(Control control)
{
    StringBuilder result = new StringBuilder();

    String controlID = String.Empty;

    Type type = null;

    foreach (Control c in control.Controls)
    {
        try
        {
            controlID = c.ID.ToString();

            if (c is IEditableTextControl)
            {
                result.Append(controlID + ": " + ((IEditableTextControl)c).Text);
                result.Append("<br />");
            }
            else if (c is ICheckBoxControl)
            {
                result.Append(controlID + ": " + ((ICheckBoxControl)c).Checked);
                result.Append("<br />");
            }
            else if (c is ListControl)
            {
                result.Append(controlID + ": " + ((ListControl)c).SelectedValue);
                result.Append("<br />");
            }
            else if (c.HasControls())
            {
                result.Append(controlToString(c));
            }

            //result.Append("<br />");
        }
        catch (Exception e)
        {

        }
    }

    return result.ToString();
}

没有尝试/捕获

你调用的对象是空的。

在线控制 ID = .....


我更喜欢 David Finley 的 FindControl linq 方法http://weblogs.asp.net/dfindley/archive/2007/06/29/linq-the-uber-findcontrol.aspx http://weblogs.asp.net/dfindley/archive/2007/06/29/linq-the-uber-findcontrol.aspx

public static class PageExtensions
{
    public static IEnumerable<Control> All(this ControlCollection controls)
    {
        foreach (Control control in controls)
        {
            foreach (Control grandChild in control.Controls.All())
                yield return grandChild;

            yield return control;
        }
    }
}

Usage:

// get the first empty textbox
TextBox firstEmpty = accountDetails.Controls
    .All()
    .OfType<TextBox>()
    .Where(tb => tb.Text.Trim().Length == 0)
    .FirstOrDefault();

// and focus it
if (firstEmpty != null)
    firstEmpty.Focus();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环遍历asp.net网页上的所有控件 的相关文章

随机推荐