0

我想在我的 ASP.NET 网页中生成文本框。它工作正常

    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 包装对象)。

有没有办法做到这一点?

对于诸如“为什么不手动添加这些文本框?”之类的任何帖子。我将发送一张我用键盘敲击头部的照片,而屏幕上会显示一个包含数十个需要处理的字段的 SQL 转储 :)
或狐猴的照片。狐猴也不错

4

4 回答 4

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"));
}
于 2013-04-11T18:07:05.820 回答
0

我可能会使用中继器控件:

    <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 代码来设置现有值。

于 2013-04-11T18:20:03.093 回答
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);
}
于 2013-04-11T19:15:45.063 回答
0

您可以创建自定义 ASP.NET 控件来呈现您需要的任何 HTML。看看这个: 开发一个简单的 ASP.NET 服务器控件。通过这种方式,您可以创建一个名为 CustomTextBox 的控件,该控件将在段落内呈现一个文本框。

于 2013-04-11T20:23:52.917 回答