C# 如何以编程方式将复选框、标签和DDL添加到ASP.NET页面?

C# 如何以编程方式将复选框、标签和DDL添加到ASP.NET页面?,c#,asp.net,C#,Asp.net,我正在尝试从C#中的后台类向ASP.NET页面(aspx)添加复选框、标签和DDL。我一直在使用LiteralControl\u liText=new LiteralControl()附加标签,以便使用this.Controls.Add(_-liText)显示它们 如何将DDL和复选框从C#代码添加到ASp.NET页面,以便我的标签与DDL和复选框位于同一行 我已经使用以下语法创建了DDL: List<DropDownList> _ddlCollection=new List<

我正在尝试从C#中的后台类向ASP.NET页面(aspx)添加复选框、标签和DDL。我一直在使用
LiteralControl\u liText=new LiteralControl()
附加标签,以便使用
this.Controls.Add(_-liText)显示它们

如何将DDL和复选框从C#代码添加到ASp.NET页面,以便我的标签与DDL和复选框位于同一行

我已经使用以下语法创建了DDL:

List<DropDownList> _ddlCollection=new List<DropDownList>();
for (int i = 0; i < 5; i++)
            {
                _ddlCollection.Add(new DropDownList());
            }
List _ddlCollection=newlist();
对于(int i=0;i<5;i++)
{
_ddlCollection.Add(新的DropDownList());
}
问题不在我从CreateChildControls()调用的.Controls.Add()中。它是OnPreRender()方法,我在其中填充ddl并选中复选框。LiteralControl类对此有好处吗?以下是我在OnPReRender()中尝试的内容:

foreach(web.list中的SPList列表)
{
如果(!list.Hidden)
{
_Text.Text+=@;
_liText.Text+=list.Title+“
”; } }
您的控件存在,但页面或用户控件不知道它们

您需要将控件添加到页面中

Page.Controls.Add(_ddlCollection);
也可以将控件添加到页面上的其他控件,例如面板

panel1.Controls.Add(_ddlCollection);
你正在添加一个下拉列表,我认为这不是你想要的。 您需要添加列表项

var dropDown = new DropDownList {Id = "dropDown1"};
dropDown.Items.Add(new ListItem("text", "value");

Page.Controls.Add(dropDown);
为下拉列表添加标签

Page.Controls.Add(new Label {AssociatedControlId = dropDown.Id, Text = "Drop me down"});
对于其他控件,请遵循相同的过程:

添加复选框 不要向文本添加html控件,除非这是您真正想要的。 如果希望能够访问代码隐藏中的复选框,则需要将其添加为asp.net控件。用户需要一个占位符

placeHolder1.Controls.Add(new CheckBox {Id = "chkBox", Text="Tick me"});
<form id="form1" runat="server">
    <asp:PlaceHolder runat="server" ID="phMain"></asp:PlaceHolder>
</form>
复选框上的文本属性将是复选框的标签,单击文本时勾选/取消勾选复选框

输出应该是

<label for="dropDown1" >Drop me down</label>
<select id="dropDown1" >
    <option value="value" >text</option>
</select>    

<input type="checkbox" id="chkbox" />
<label for="chkbox" >Tick me</label>
把我放下
文本
勾选我

您的控件存在,但页面或用户控件不知道它们

您需要将控件添加到页面中

Page.Controls.Add(_ddlCollection);
也可以将控件添加到页面上的其他控件,例如面板

panel1.Controls.Add(_ddlCollection);
你正在添加一个下拉列表,我认为这不是你想要的。 您需要添加列表项

var dropDown = new DropDownList {Id = "dropDown1"};
dropDown.Items.Add(new ListItem("text", "value");

Page.Controls.Add(dropDown);
为下拉列表添加标签

Page.Controls.Add(new Label {AssociatedControlId = dropDown.Id, Text = "Drop me down"});
对于其他控件,请遵循相同的过程:

添加复选框 不要向文本添加html控件,除非这是您真正想要的。 如果希望能够访问代码隐藏中的复选框,则需要将其添加为asp.net控件。用户需要一个占位符

placeHolder1.Controls.Add(new CheckBox {Id = "chkBox", Text="Tick me"});
<form id="form1" runat="server">
    <asp:PlaceHolder runat="server" ID="phMain"></asp:PlaceHolder>
</form>
复选框上的文本属性将是复选框的标签,单击文本时勾选/取消勾选复选框

输出应该是

<label for="dropDown1" >Drop me down</label>
<select id="dropDown1" >
    <option value="value" >text</option>
</select>    

<input type="checkbox" id="chkbox" />
<label for="chkbox" >Tick me</label>
把我放下
文本
勾选我

首先,您应该添加一个占位符

placeHolder1.Controls.Add(new CheckBox {Id = "chkBox", Text="Tick me"});
<form id="form1" runat="server">
    <asp:PlaceHolder runat="server" ID="phMain"></asp:PlaceHolder>
</form>

接下来,如果您在一行中添加了使用表的内容(这是一个简单但不推荐的方法,下一步将所有内容添加到页面并为页面设置css样式)

protectedoverride void CreateChildControls()受保护的覆盖
{
base.CreateChildControls();
Table Table=新表();
对于(int i=0;i<3;i++)
{
TableRow tr=新的TableRow();
TableCell tc1=新的TableCell();
添加(新的LiteralControl(String.Format(“行{0}”,i));
tr.Cells.Add(tc1);
TableCell tc2=新的TableCell();
复选框chb=新复选框();
chb.ID=String.Format(“复选框{0}”,i);
chb.Text=String.Format(“复选框{0}”,i);
chb.CheckedChanged+=chb_CheckedChanged;
chb.AutoPostBack=true;
tc2.控制。添加(chb);
tr.Cells.Add(tc2);
TableCell tc3=新的TableCell();
DropDownList ddl=新的DropDownList();
ddl.ID=String.Format(“DropDownList{0}”,i);
ddl.项目添加(“1111”);
ddl.项目添加(“2222”);
ddl.项目添加(“3333”);
ddl.SelectedIndex=i;
ddl.Enabled=false;
tc3.Controls.Add(ddl);
tr.Cells.Add(tc3);
表.行.添加(tr);
}
phMain.Controls.Add(表);
}
void chb_CheckedChanged(对象发送方,事件参数e)
{
复选框chb=作为复选框的发件人;
字符串ddlid=chb.ID.Replace(“复选框”、“下拉列表”);
DropDownList ddl=this.Page.FindControl(ddlid)作为DropDownList;
如果(ddl!=null)
{
ddl.Enabled=chb.Checked;
}
}

首先,您应该添加一个占位符

placeHolder1.Controls.Add(new CheckBox {Id = "chkBox", Text="Tick me"});
<form id="form1" runat="server">
    <asp:PlaceHolder runat="server" ID="phMain"></asp:PlaceHolder>
</form>

接下来,如果您在一行中添加了使用表的内容(这是一个简单但不推荐的方法,下一步将所有内容添加到页面并为页面设置css样式)

protectedoverride void CreateChildControls()受保护的覆盖
{
base.CreateChildControls();
Table Table=新表();
对于(int i=0;i<3;i++)
{
TableRow tr=新的TableRow();
TableCell tc1=新的TableCell();
添加(新的LiteralControl(String.Format(“行{0}”,i));
tr.Cells.Add(tc1);
TableCell tc2=新的TableCell();
复选框chb=新复选框();
chb.ID=String.Format(“复选框{0}”,i);
chb.Text=String.Format(“复选框{0}”,i);
chb.CheckedChanged+=chb_CheckedChanged;
chb.AutoPostBack=true;
tc2.控制。添加(chb);
tr.Cells.Add(tc2);
TableCell tc3=新的TableCell();
DropDownList ddl=新的DropDownList();
ddl.ID=String.Format(“DropDownList{0}”,i);
ddl.项目添加(“1111”);
ddl.项目添加(“2222”);
ddl.项目添加(“3333”);
ddl.SelectedIndex=i;
ddl.Enabled=false;
tc3.Controls.Add(ddl);
tr.Cells.Add(tc3);
表.行.添加(tr);
}
phMain.Controls.Add(表);
}
void chb_CheckedChanged(对象发送方,事件参数e)
{
复选框chb=作为复选框的发件人;
字符串ddlid=chb.ID.Replace(“复选框”,“删除