有没有更好的方法来访问深度嵌套的控件?

时间:2019-08-16 15:53:36

标签: asp.net webforms code-behind

我已经开始在一家公司工作,并且不能完全访问他们先前构建的对象/框架/等,而且还受命使用库/对象/等来创建新系统。我可以覆盖他们的大多数图书馆,但没有看到到底发生了什么,我发现使用它具有挑战性。

.net网络表单中的全部内容,我实际上也不是很熟悉。

他们有一个基于Webforms的习俗Model-View-Controller类系统,可以生成完全控制的ascx页面,但是,当然,ascx文件只是一行,后面的代码为空,所以我所能做的一切看到是动态生成的标记。

我将写出如下标记:

<div id="id1">
  <div id="id2">
    <div id="id3">
      <table id="tt_id1">
        <input id="myModelNameID"> 

等,等等

在.net中,对象的名称也与在标记中生成的名称不同,因此这使事情变得更具挑战性-我必须花一会儿时间检查对象,以找到控件所在位置的完整路径。

访问深度嵌套控件的最简单方法是什么?

我尝试使用对不同ID的引用(例如ClientID与ID),等等。我在各处都找到了示例,但通常人们都在做类似我正在做的事情。

我试图避免编写30个findControls等。我可以写一个我想可以做到的方法,但是我希望有一种更简单的方法,或者已经有一些可用的方法。

当我尝试访问代码中的任何内容以访问对象时,我正在调试器中检查它们或使用dumper类或反射,然后编写如下内容:

    //This is an example that would add a button in a table.

    Button MyButt = new Button();
    MyButt.Text = "Click Me";

    //Split into sections for readability...

    Control c = Page.FindControl("ctl00").FindControl("Form1");
    Control c2 = c.FindControl("MainPage").FindControl("id1");
    Control MyTable = c2.FindControl("id2").FindControl("myTable1");
    MyTable.Controls.Add(MyButt);

0 个答案:

没有答案