【问题标题】:Create multiple tbodies dynamically动态创建多个 tbody
【发布时间】:2013-06-27 20:32:55
【问题描述】:

我希望将多个tbody 添加到我的asp.net table。 这是我迄今为止尝试过的

TableRow tbody = new TableRow();
tbody.TableSection = TableRowSection.TableBody;
TableRow row = new TableRow();
TableCell cell = new TableCell();
row.Attributes.Add("data-filter", "featured");
cell.Text = "Featured";
row.Cells.Add(cell);
tbody.Controls.Add(row);//throws an error saying tablerow can't have table row as child
Table1.Rows.Add(tbody);

这会引发一个错误,即我不能将表行作为表行的子行,这听起来是合法的。但我不希望该行位于<tbody> 之下,并且似乎无法弄清楚如何去做。我想要的输出是

<tbody>
      <tr data-filter="featured">
         <td>Featured</td>
      </tr>
</tbody>

【问题讨论】:

  • 不,这根本没有帮助。我无法动态创建 tbody。是的,我可以使用TableRowSection.TableBody 将行放在 tbody 内,但我想要多个 tbody 并能够将不同的行放入不同的 tbody
  • 为什么要在单个table 中包含多个tbody 标签?还是我误解了您的 multiple tbodies 声明?
  • @karl 好吧,我想要它的原因很难解释。不,你不是误会。我不想在一个表内有多个 tbodies。在一个表中有多个 tbodies 是 html 抱怨,它没有错。我的问题是如何动态地做到这一点。

标签: c# asp.net webforms html-table


【解决方案1】:

&lt;asp:Table&gt; 不能使用多个 &lt;tbody&gt; 元素,TableSection 属性定义了应该在其中呈现行的“部分”,但是控件本身每个 TableRowSection 只呈现一个元素

至于例外,你不需要嵌套的TableRow 对象,试试这个:

TableRow tbody = new TableRow();
tbody.TableSection = TableRowSection.TableBody;
TableCell cell = new TableCell();
tbody.Attributes.Add("data-filter", "featured");
cell.Text = "Featured";
tbody.Cells.Add(cell);
Table1.Rows.Add(tbody);

这是输出:

<table id="MainContent_Table1">
    <tbody>
        <tr data-filter="featured">
        <td>Featured</td>
        </tr>
    </tbody>
</table>

要实现您所追求的,您可以尝试创建自定义控件,或者可能是最简单的解决方案,使用HtmlGenericControl 并以这种方式构建表格元素,不是最优雅的,但它具有预期的结果:

var table = new HtmlGenericControl("table");
var tbody = new HtmlGenericControl("tbody");
var tr = new HtmlGenericControl("tr");
var td = new HtmlGenericControl("td");

tr.Attributes.Add("data-filter", "featured");
td.InnerText = "Featured";
tr.Controls.Add(td);

tbody.Controls.Add(tr);
table.Controls.Add(tbody);

tbody = new HtmlGenericControl("tbody");
tr = new HtmlGenericControl("tr");
td = new HtmlGenericControl("td");
tr.Attributes.Add("data-filter", "featured");
td.InnerText = "Featured";
tr.Controls.Add(td);

tbody.Controls.Add(tr);
table.Controls.Add(tbody);

Page.Controls.Add(table);

这是输出:

<table>
    <tbody>
        <tr data-filter="featured">
            <td>Featured</td>
        </tr>
    </tbody>
    <tbody>
        <tr data-filter="featured">
            <td>Featured</td>
        </tr>
    </tbody>
</table>

【讨论】:

  • 没错,但是如何创建第二个tbody 并向其中添加行,这是我的实际问题 (multiple tbodies)
  • 对不起,你是对的,我没有涵盖实际问题,我已经更新了我的答案以包含更多细节,希望它就足够了。
  • 太棒了,使用HtmlGenericControl 完全逃过了我的脑海。更好的是,我想我可以使用带有runat=server 属性的html 表格。
猜你喜欢
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多