You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#动态生成HTML表格求助:复选框选中值失效、文本框布局异常

修正C#动态生成HTML表格的两个问题

我来帮你搞定这两个问题!咱们先拆解原代码里的问题,再给你修正后的完整实现:

问题分析

  • 未识别CheckboxList选中项:原代码遍历了CheckboxList的所有选项,没有判断item.Selected状态,导致不管选没选都生成表头和文本框。
  • 文本框垂直堆叠:原代码给每个文本框都新建了一个<tr>标签,所以每个文本框单独占一行,自然垂直排列了。

修正后的代码

protected void btnBullDozer_Click(object sender, EventArgs e) 
{
    StringBuilder sb = new StringBuilder(string.Empty);
    // 先筛选出选中的项
    var selectedItems = checkboxtest.Items.Cast<ListItem>().Where(item => item.Selected).ToList();

    sb.Append("<table>");
    // 生成表头行
    sb.Append("<tr>");
    sb.Append("<th>Sponsor Level</th>");
    foreach (var item in selectedItems)
    {
        sb.Append($"<th>{item.Text}</th>");
    }
    sb.Append("</tr>");

    // 生成文本框行(所有文本框在同一行)
    sb.Append("<tr>");
    // 第一个文本框对应Sponsor Level
    sb.Append("<td><input type='text' name='field_1'></td>");
    int z = 2;
    foreach (var item in selectedItems)
    {
        sb.Append($"<td><input type='text' name='field_{z}'></td>");
        z++;
    }
    sb.Append("</tr>");
    sb.Append("</table>");

    mask.InnerHtml = sb.ToString();
}

关键修改说明

  • 筛选选中项:先用Linq筛选出Selected == true的选项,只处理这些项,避免生成多余的表头和文本框。
  • 统一文本框行:把所有文本框放在同一个<tr>标签内的<td>中,这样就能水平排列了。
  • 优化字符串拼接:用字符串插值($"")让代码更易读,同时避免手动拼接的语法错误。
  • 修正标签闭合:原代码的表格、行标签闭合逻辑有问题,现在确保所有标签正确嵌套和闭合。

这样修改后,当用户选中4个复选框时,就会生成包含Sponsor Level+4个选中项名称的5个表头,下方对应一行5个水平排列的文本框,完全符合你的预期需求。

内容的提问来源于stack exchange,提问作者BoJack Horseman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:36:24