Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何访问动态加载的aspx页面的控件集合?_C#_Asp.net_Dynamic_Webforms - Fatal编程技术网

C# 如何访问动态加载的aspx页面的控件集合?

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) {

假设我有两个webforms,A.aspxB.aspx,其中B.aspx包含一些简单的web控件,比如一个文本框和一个按钮

我正在尝试执行以下操作:

当请求A.aspx时, 我想动态调用并将B.aspx加载到内存中,并输出B.aspx中包含的所有控件的详细信息

以下是我在A.aspx的codebehind中尝试的内容:

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; 
      }