C# 如何访问动态加载的aspx页面的控件集合?
假设我有两个webforms,A.aspx和B.aspx,其中B.aspx包含一些简单的web控件,比如一个文本框和一个按钮 我正在尝试执行以下操作: 当请求A.aspx时, 我想动态调用并将B.aspx加载到内存中,并输出B.aspx中包含的所有控件的详细信息 以下是我在A.aspx的codebehind中尝试的内容:C# 如何访问动态加载的aspx页面的控件集合?,c#,asp.net,dynamic,webforms,C#,Asp.net,Dynamic,Webforms,假设我有两个webforms,A.aspx和B.aspx,其中B.aspx包含一些简单的web控件,比如一个文本框和一个按钮 我正在尝试执行以下操作: 当请求A.aspx时, 我想动态调用并将B.aspx加载到内存中,并输出B.aspx中包含的所有控件的详细信息 以下是我在A.aspx的codebehind中尝试的内容: var compiledType = BuildManager.GetCompiledType("~/b.aspx"); if (compiledType != null) {
var compiledType = BuildManager.GetCompiledType("~/b.aspx");
if (compiledType != null)
{
var pageB = (Page)Activator.CreateInstance(compiledType);
}
foreach (var control in pageB.Controls)
{
//output some details for each control, like it's name and type...
}
当我尝试上面的代码时,pageB的控件集合总是空的
有什么办法可以让它工作吗
其他一些重要细节:
- 这两种web表单都使用母版页(因此b.aspx中的web控件实际上放在“内容”标记中)
- 我也试过使用。不走运
- 每当我做这样的事情时,我总是不得不使用
不幸的是,FindControl没有递归版本。但是,提供了FindControl递归函数。使用它,您可以迭代容器中的所有控件(可能包括您的PageB)
我真的认为你应该提供更多关于你正在尝试做什么的背景资料。HttpServerUtility::Execute(字符串,TextWriter)将执行一个页面,并将结果写入提供的TextWriter对象。从那里您可以检查页面的内容,如果生成的HTML文档格式正确,您甚至可以通过.NETXMLAPI遍历其结构
您希望访问已执行页面的控件集合的原因是什么?为什么要访问已执行页面的控件集合?
private Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}