我想在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转储需要处理显示在屏幕上:)或者是一张狐猴的照片。狐猴也没关系
答案 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的控件,它将在段落中呈现文本框。