【发布时间】:2014-02-25 04:27:21
【问题描述】:
我们需要动态创建 html 下拉列表。以下是我们当前的代码。 Option1 和 Option2 是包含所有项目的字符串。我们有两个字符串的原因是我们将所有项目分成两组。
<td>
<div id="dvGroup" style="display:none;" runat="server"></div>
</td>
string Option1 = "<optgroup label='Group1'><option>1</option><option1>2</option>";
string Option2 = "<optgroup label='Group2'><option>a</option><option>b</option><option>c</option>;
…
dvGroup.InnerHtml = "<Select name='ddGroup' id='ddGroup'>" + Option1 + Option2 + "</Select>";
但是通过设置 InnerHtml 可能会带来一些安全问题。所以我把它改成:
HtmlSelect select = new HtmlSelect();
select.ID = "ddGroup";
select.Name = "ddGroup";
select.ClientIDMode = ClientIDMode.Static;
dvGroup.Controls.Add(select);
select.Controls.Add(new LiteralControl(Option1 + Option2));
但是,它在 select.Controls.Add... 行引发了以下错误
'System.Web.UI.HtmlControls.HtmlSelect' does not allow child controls.
我该如何解决这个问题?另一个问题是,将 ClientIDMode 设置为 Static 只能确保 id 没有更改,但名称仍会添加额外的东西。如何确保名称也没有更改?
【问题讨论】:
标签: select code-behind