在ASP.NET中使用HTML自动插入TextBoxes

时间:2013-04-11 18:03:47

标签: c# asp.net

我想在ASP.NET网页中生成TextBoxes。它工作正常

    foreach (var Field in db.A_Settings)
    {
        TextBox t = new TextBox();
        t.ID = Field.ID.ToString();
        t.CssClass = "smallinput";
        t.Text = Field.Text;
        LabelPlaceHolder.Controls.Add(t);
    }

它很好地生成了这样的东西:

<input name="ctl00$ContentPlaceHolder1$1" type="text" value="ValueA" id="ContentPlaceHolder1_1" class="smallinput">
<input name="ctl00$ContentPlaceHolder1$2" type="text" value="ValueB" id="ContentPlaceHolder1_4" class="smallinput">
<input name="ctl00$ContentPlaceHolder1$3" type="text" value="ValueC" id="ContentPlaceHolder1_5" class="smallinput">

这是正确的,但事实上我想用一些HTML包装它,比如

<p>
    <label>Label for the first TextBox obtained from database</label>
    <span class="field">
        <input name="ctl00$ContentPlaceHolder1$1" type="text" value="ValueA" id="ContentPlaceHolder1_1" class="smallinput">
    </span>
</p>

我找不到如何这样做,所以我考虑将它放入List<TextBox>,但我也被困在这里(同样的问题 - 不知道如何用HTML包装对象)。

有没有办法做到这一点?

对于任何帖子,例如“为什么不手动添加这些TextBox?”我会发一张照片让我在键盘上敲击我的脑袋,同时会有一个带有几十个字段的SQL转储需要处理显示在屏幕上:)或者是一张狐猴的照片。狐猴也没关系

4 个答案:

答案 0 :(得分:1)

不是最干净的解决方案,但应该有效......

foreach (var Field in db.A_Settings)
{
    TextBox t = new TextBox();
    t.ID = Field.ID.ToString();
    t.CssClass = "smallinput";
    t.Text = Field.Text;
    //add literal control containing html that should appear before textbox
    LabelPlaceHolder.Controls.Add(new LiteralControl("html before"));
    LabelPlaceHolder.Controls.Add(t);
    //add literal control containing html that should appear after textbox
    LabelPlaceHolder.Controls.Add(new LiteralControl("html after"));
}

答案 1 :(得分:0)

我可能会使用Repeater控件:

    <asp:Repeater ID="SettingsRepeater" runat="server">
        <ItemTemplate>
            <p>
                <asp:Label ID="ItemLabel" runat="server"></asp:Label>
                <span class="field">
                    <asp:TextBox ID="ItemTextbox" runat="server"></asp:TextBox>
                </span>
            </p>
        </ItemTemplate>
    </asp:Repeater>

并将列表绑定到转发器:

SettingsRepeater.DataSource = db.A_Settings;
SettingsRepeater.DataBind();

然后编写ItemDataBound代码以设置现有值。

答案 2 :(得分:0)

您想要HtmlGenericControl个控件。

foreach (var Field in db.A_Settings)
{
    TextBox t = new TextBox();
    t.ID = Field.ID.ToString();
    t.CssClass = "smallinput";
    t.Text = Field.Text;

    var label = new HtmlGenericControl("label");
    label.Controls.Add(new LiteralControl("LABEL TEXT"));

    var p = new HtmlGenericControl("p");
    p.Controls.Add(label);

    var span = new HtmlGenericControl("span");
    span.Attributes.Add("class", "field");
    span.Controls.Add(t);
    p.Controls.Add(span);

    LabelPlaceHolder.Controls.Add(p);
}

答案 3 :(得分:0)

您可以创建可以呈现所需HTML的自定义ASP.NET控件。看看这个: Developing a Simple ASP.NET Server Control。这样,您就可以创建一个名为CustomTextBox的控件,它将在段落中呈现文本框。