Я хочу создать динамические поля.Я погуглил несколько примеров и заставил их работать, однако проблема во всех этих примерах заключается в том, что они имеют дело с одним типом элемента управления, в большинстве случаев его TextBox.
Мне нужна возможность создавать и отображать различные элементы UIControl, такие как TextBox, DropDownList, Button и т. Д.
Необязательно: я нашел один пример, который я изменил, и он отображал TextBox и DropDownListдинамически.Однако из-за Type мне пришлось обрабатывать TextBox и DropDownList в отдельных циклах, что привело к созданию пользовательского интерфейса, в котором сначала отображаются все элементы управления TextBox, а затем отображаются все элементы управления DropDownList (так что в основном порядок не сохраняется).
ОБНОВЛЕНИЕ: Добавлен исходный код. Файл .ASPX.CS:
public partial class DynamicFields : System.Web.UI.Page
{
static int intControlCountTXB = 0;
static int intControlCountDDL = 0;
static int intControlCount = 0;
private Control[] arrControls;
private DropDownList[] arrDDL;
private TextBox[] arrTXB;
protected void Page_Load(object sender, EventArgs e)
{
}![enter image description here][1]
protected void Page_PreInit(object sender, EventArgs e)
{
Control myControl = GetPostBackControl(this.Page);
if ((myControl != null))
{
if ((myControl.ClientID.ToString() == "btnAddTextBox"))
{
intControlCountTXB = intControlCountTXB + 1;
intControlCount++;
}
if ((myControl.ClientID.ToString() == "btnAddDDL"))
{
intControlCountDDL = intControlCountDDL + 1;
intControlCount++;
}
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
int i;
TextBox txbTarget;
DropDownList ddlTarget;
arrDDL = new DropDownList[intControlCountDDL];
arrTXB = new TextBox[intControlCountTXB];
for (i = 0; i < intControlCountDDL; i += 1)
{
ddlTarget = new DropDownList();
ddlTarget.ID = "DDL" + i.ToString();
ddlTarget.Items.Add("A");
ddlTarget.Items.Add("B");
ddlTarget.Items.Add("C");
ddlTarget.Items.Add("D");
myPlaceHolder.Controls.Add(ddlTarget);
arrDDL[i] = ddlTarget;
}
for (i = 0; i < intControlCountTXB; i += 1)
{
txbTarget = new TextBox();
txbTarget.ID = "TXB" + i.ToString();
myPlaceHolder.Controls.Add(txbTarget);
arrTXB[i] = txbTarget;
}
}
protected void btnAddTextBox_Click(object sender, EventArgs e)
{
// Handled in preInit due to event sequencing.
}
protected void btnAddDDL_Click(object sender, EventArgs e)
{
// Handled in preInit due to event sequencing.
}
public static Control GetPostBackControl(Page thePage)
{
Control myControl = null;
string ctrlName = thePage.Request.Params.Get("__EVENTTARGET");
if (((ctrlName != null) & (ctrlName != string.Empty)))
{
myControl = thePage.FindControl(ctrlName);
}
else
{
foreach (string Item in thePage.Request.Form)
{
Control c = thePage.FindControl(Item);
if (((c) is System.Web.UI.WebControls.Button))
{
myControl = c;
}
}
}
return myControl;
}
}
И файл .ASPX:
<form runat="server" id="frmMaster">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<a id="top" name="top"></a>
<ajax:UpdateProgress id="uprMain" runat="server" AssociatedUpdatePanelID="upMain" DisplayAfter="0">
<progresstemplate>
<div id="spnLoading" class="LoadingDiv">
<table cellspacing="0" cellpadding="0" class="LoadingTable">
<tr>
<td width="100%" height="100%" class="LoadingTableCell">
<img src="images/icon_loading.gif"> Please Wait...
</td>
</tr>
</table>
</div>
</progresstemplate>
</ajax:UpdateProgress>
<div id="globalWrapper">
<div id="contentstart">
<asp:UpdatePanel ID="upMain" runat="server">
<ContentTemplate>
<asp:TextBox ID="hid" runat="server" />
<asp:PlaceHolder runat="server" ID="myPlaceHolder"></asp:PlaceHolder>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAddTextBox" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnAddTextBox" runat="server" Text="Add TextBox" OnClick="btnAddTextBox_Click" />
<asp:Button ID="btnAddDDL" runat="server" Text="Add DDL" OnClick="btnAddDDL_Click" />
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Label runat="server" ID="MyLabel"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
<br />
<br />
<div id="divFooter" class="Footer" runat="server" visible="true">
<br />
Copyright © 2012. All rights reserved.
<br />
<br />
<br />
</div>
</form>