Как создать HTML выбор в коде за C#?

Нам нужно динамически создавать выпадающий список 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, убедитесь, что идентификатор не изменился, а имя все еще добавляется. Как мне убедиться, что имя не изменилось?

1 ответ

Вы можете сделать это так:

HtmlSelect mHtmlSelect = new HtmlSelect();
mHtmlSelect.ID = "ddGroup";
mHtmlSelect.Name = "ddGroup";
mHtmlSelect.ClientIDMode = ClientIDMode.Static;

String Option1 = "Hello";
String Option2 = "World";
mHtmlSelect.Items.Add(new ListItem(Option1 + Option2));
this.Controls.Add(mHtmlSelect);

Выход:

<select name="ddGroup" id="ddGroup">
    <option value="HelloWorld">HelloWorld</option>
</select>
Другие вопросы по тегам