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
相关产品推荐
相关产品推荐

