【问题标题】:How to create a html select in code behind c#?如何在 C# 后面的代码中创建 html 选择?
【发布时间】: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


    【解决方案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>
    

    【讨论】:

    • Option1 和 Option2 是包含所有项目的字符串,而不是项目本身。
    • 我收到以下错误:无法修改控件集合,因为控件包含代码块(即 )。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多