使用ASP.NET控件创建无序列表?

10

我有一个Web控件,我一直在动态添加控件,但现在的要求是在控件周围添加一个有序列表。

为了渲染这些控件,我将它们添加到ControlsCollection中。

    protected void Page_Load(object sender, EventArgs e)
    {
        var document = XDocument.Load(@"http://localhost:49179/XML/Templatek.xml");
        var builder = ObjectFactory.GetInstance<IControlBuilder>();
        var controls =builder.BuildControls(document);
        controls.ToList().ForEach(c => Controls.Add(c));

    }

我想要构建的是这个 HTML 和 ASP.NET 控件:

 <fieldset>
    <ol>
      <li>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
      </li>
      <li>
          <asp:TextBox runat="server" ID="TextBox1"></asp:TextBox>
      </li>
    </ol>
    </fieldset>

如何定位列表项中的控件?我需要用不同的方法来解决这个问题吗?

2个回答

11

修改这一行:

controls.ToList().ForEach(c => Controls.Add(c)); 

这些代码:

Control ol = new HtmlGenericControl("ol");
controls.ToList().ForEach(c => ol.Controls.Add(new HtmlGenericControl("li").Controls.Add(c)));
Controls.Add(ol);

编辑:

    Control ol = new HtmlGenericControl("ol");
    controls.ToList().ForEach(c =>
                                  {
                                      var li = new HtmlGenericControl("li");
                                      li.Controls.Add(c);
                                      ol.Controls.Add(li);
                                  });
    Controls.Add(ol);

这段代码对我来说没有意义;我认为 Controls.Add 返回 void,所以你怎么能将其结果用作参数呢? - Sam
1
我不打算使用任何 Controls.Add 的结果。 - matt-dot-net
你看起来是在试图将Controls.Add的结果作为ol.Controls.Add的参数使用。你的代码在我的环境下无法编译。 - Sam
C#(4)编译器和我都将您的代码解释为使用Add的结果作为ol.Controls.Add的参数。 - Sam
嗯,我有99%的把握它曾经构建成功过。我期望使用new操作符的结果,而不是Add()的结果。 - matt-dot-net

6

使用这个类绝对是正确的选择。它不仅能够生成干净易读的过程式代码,还可以避免你看到一堆疯狂的 lambda 表达式来完成如此简单的任务。 - afuzzyllama
@afuzzyllama,您不必使用任何lambda表达式。如果您愿意,只需使用常规的foreach即可。所有lambda语法所做的就是为您节省编写带有大量一次性使用变量的代码的时间。 - MiniRagnarok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接