【问题标题】:How to get controls on page in master detail page?如何在主详细信息页面的页面上获取控件?
【发布时间】:2009-12-21 15:08:27
【问题描述】:

我有母版页及其内容页。我想获取位于内容页面上的文本框。如何在内容页面后面的 C# 代码中获取它们?

【问题讨论】:

  • 在母版页或其他地方获取它们?
  • RichardOD:当我阅读问题时,它指出“如何从内容页面后面的代码访问内容页面上的文本框”。这应该是微不足道的,但他可能想知道如何从母版页访问它,但问题并没有这么说。

标签: c# .net controls master-detail


【解决方案1】:

使用它的 ID 访问它:

标记:

<asp:TextBox runat="server" ID="myTextBox"></asp:TextBox>

后面的代码:

myTextBox.Text = "This is a text!";

注意,您需要添加 runat="server" 才能访问它。

编辑
在您发表评论后,我想我明白您的意思了。您需要遍历控件树下的所有控件以找到所有 TextBox。

这是一个递归实现:

public List<Control> FindControls(Control root, Type type)
{
    var controls = new List<Control>();

    foreach (Control ctrl in root.Controls)
    {
        if (ctrl.GetType() == type)
            controls.Add(ctrl);

        if (ctrl.Controls.Count > 0)
            controls.AddRange(FindControls(ctrl, type));
    }

    return controls;
}

要获取页面中的所有文本框,您可以使用 Page 作为根控件来调用它:

var allTextBoxes = FindControls(Page, typeof(TextBox));

上面的例子是为了阐明你应该如何进行的想法。我会通过使用扩展方法来做一些不同的事情:

public static class ExtensionMethods
{
    public static IEnumerable<Control> FindControls(this Control root)
    {
        foreach (Control ctrl in root.Controls)
        {
            yield return ctrl;
            foreach (Control desc in ctrl.FindControls())
                yield return desc;
        }

    }
}

现在您可以直接在任何控件上使用它,甚至可以在结果上应用 Linq,因为它是一个 IEnumerable。

这将为您提供页面中所有控件的数组:

var allControls = this.FindControls().ToArray();

获取所有 TextBox 控件的数组:

var allTextBoxes = this.FindControls()
                       .OfType<TextBox>().ToLArray<TextBox>();

并获取具有特定 id 的文本框列表:

var myTextBox = this.FindControls()
                    .OfType<TextBox>()
                    .Where<TextBox>(tb => tb.ID.Equals("textBox1")).ToList<TextBox>();

你也可以在 foreach 语句中使用它:

foreach (Control c in this.FindControls())
{
  ...
}

【讨论】:

  • 来吧,我知道我可以通过 Id 访问它们,请参阅我正在尝试使用 Page.Controls 在内容页面后面的代码上获取它们。但是,尽管他们向我展示了母版页的控件而不是内容页。我想访问具有 TextBox 类型的内容页的控件集合。请指导我
  • 我询问了如何获取作为内容页面提供给母版页的表单的文本框控件集合。没人能回答吗?
  • 您想从母版页访问内容页上的 TextBox 控件吗?
猜你喜欢
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多