是否可以使用反射获取 Web 表单上存在的控件的纯文本列表?基本上,一位同事正在寻找一个控件列表来帮助定义验证策略,例如,一般产品编号必须是数字,但在某些屏幕上它们可以是字母数字。我认为使用反射来生成类似以下内容的列表会很简单:
AddProduct.aspx
txtProductNumber
txtProductName
etc.
我可以获得表单名称,但到目前为止还没有包含其中的控件。当前代码如下所示:
Assembly assembly = Assembly.LoadFrom(@"Filename.dll");
Type[] types = assembly.GetExportedTypes();
for (int i = 0; i < types.Length; i++)
{
Page page = (Page)assembly.CreateInstance(types[i].FullName);
ControlCollection controls = page.Controls;
// At this point controls.Count = 0 presumably because the controls are defined as protected.
}
Assembly.CreateInstance有几个重载。例如,如果我将页面分配行更改为
Page page = (Page)assembly.CreateInstance(types[i].FullName, true, BindingFlags.NonPublic, null, null, null, null);
然后我得到一个关于缺少构造函数的错误。
那么我是否完全走错了路,或者我正在尝试做的事情实际上是否可行?任何帮助深表感谢。
编辑:对这个问题的延迟回复表示歉意。我们进一步使用了 Assembly.GetCallingAssembly() 来生成一个列表,但它仍然不能完全满足我们的需求。最后,我们使用了更冗长的 Find in Entire 解决方案方法。