【问题标题】:Does Visual Studio have an easy way to get a list of controls that are in a webform?Visual Studio 是否有一种简单的方法来获取 Web 表单中的控件列表?
【发布时间】:2014-05-05 19:46:52
【问题描述】:

我有一个非常广泛的旧 Web 表单,上面有很多控件。我想列出所有控件及其类型,但我希望 Visual Studio 有类似于 SQL Server 的INFORMATION_SCHEMA 表或sys.* 的东西。有谁知道 Visual Studio 是否有类似的功能?它不一定是表格 - 它可以是逗号分隔的列表等。网络搜索已经出现了通过代码提取控件的方法,但我真的想要更快的东西。

编辑:

因此,似乎普遍的共识是 Visual Studio 中不存在此类功能,并且必须以编程方式获取这些控件。 @servergta 的答案似乎是最简单的替代方案,其中一项修改是将 StringBuilder 的初始声明移到方法之外,以防止它在每次调用自身时重新设置。

感谢所有给出答案的人!

【问题讨论】:

  • 没有内置功能。使用 javascript 遍历 web 表单以获取元素。
  • 不,您描述的确切功能不是 VS 开箱即用的一部分。
  • 你看过任何使用Controls类/方法的例子
  • C# Get all web controls on page 的可能重复项
  • @DJKRAZE - 它不是那个页面的副本,因为我要求某种 Visual Studio 功能,而那个问题是要求一些程序化的东西。不过谢谢。

标签: c# asp.net visual-studio-2012 sql-server-2008-r2


【解决方案1】:

抱歉其他答案,尚未测试。

这是我测试和工作过的一种方法:

private string getctl(Control master)
    {
        StringBuilder sb = new StringBuilder();
        foreach (Control child in master.Controls)
        {
            sb.AppendFormat("| {0} - {1}", child.ClientID.ToString(), child.GetType().ToString());
            if (child.HasControls())
            {
                sb.Append(getctl(child));
            }
        }
        return sb.ToString();
    }

你可以像这样运行它:

string controls = getctl(this.Page);

【讨论】:

  • 相当不错,但最好的做法是使用 StringBuilder 而不是字符串连接。作为提示,您可能想为您的txt += "|" + ... 行尝试sb.AppendFormat。这样做,我会投赞成票。
  • 我明白了,但是这个问题太“基本”了,所以我为初学者简化了答案,StringBuilder 是在生产环境中执行此操作的正确方法,但是对于一次性运行代码,我认为这是没必要,但我会按照你说的编辑帖子。
  • 那是一段不错的代码。我可能最终会使用它,因为我正在寻找的功能在 Visual Studio 中似乎并不存在,但我会对测试时发现的代码进行一项更正:Declaring the new string or方法内部的StringBuilder 具有每次调用自身时将字符串重新设置为空的效果,因此它最终只返回最后一个父级及其子级。但是,如果您将声明更全局地移到方法之外,则它会返回所有内容。感谢您提供有用的答案!我很感激。
  • 抱歉,可能出现错误,我已尝试再次运行代码并列出所有控件
【解决方案2】:

一般 Visual Studio 工具中没有。如果是web-project,而不是网站,可以查看webform附带的designer.cs文件,比较统一,可以通过机器/脚本查看。但是,如果您只需要一个可视列表,您可以使用解决方案资源管理器中的类浏览器。

但是,控制树是在运行时解析和生成的,所以它不是一个确定的列表。 (例如,数据绑定控件)。要获得明确的列表,您可以在运行时使用 Trace 功能,该功能将为您提供输出到 HTML 表的控制树。

【讨论】:

  • 我似乎无法在我的服务器资源管理器中看到任何这些,但所有控件都被硬编码到 .aspx 本身,所以也许这就是为什么?无论如何,我对 Visual Studio 功能的搜索似乎毫无意义,我最终必须进行某种程度的编码才能获得它们。不过感谢您的建议!
  • 啊。我有 Visual Studio 2013,这就是原因。可能值得升级吗?
猜你喜欢
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多