У меня есть приложение, в котором мне нужно динамически создавать целый ряд различных элементов управления. Он отлично работает для нескольких флажков (или что-нибудь еще в этом отношении).
Сначала на странице ASPX поместите элемент управления PlaceHolder:
<asp:PlaceHolder runat="server" id="CtrlCanvas" />
Теперь, в своем коде позади, динамически создавайте свои элементы управления:
Label aLbl = new Label {Text = "Prompt: ", ID = ("WSLabel" + counter++)};
CtrlCanvas.Controls.Add(aLbl);
Это был ярлык, вот текстовое поле:
TextBox aBox = new TextBox {ID = "XTest1", Columns = 5, Text = " ", Width = 50};
CtrlCanvas.Controls.Add(aBox);
aBox.Focus();
Вот список радиобоксов:
RadioButtonList WRRadio = new RadioButtonList { ID = "XTestRadioList1" };
WRRadio.Items.Add("Walking ");
WRRadio.Items.Add("Running");
WRRadio.SelectedIndex = WalkRun;
WRRadio.RepeatColumns = 2;
CtrlCanvas.Controls.Add(WRRadio);
Это все, что нужно для создания контроля. Чтобы получить значения, вам нужно иметь соглашение об именах, которое позволит вам определить префикс, который ASP.NET наделяет ваши элементы управления. Я использую "XTest". Вот пример:
foreach (string aStr in Form.AllKeys)
{
int position = aStr.IndexOf("XTest"); // XTest is used in my controls
if (position > 0)
{
// Get the *prefix* added by ASP.NET
CtlPrefix = aStr.Substring(0, position);
break;
}
}
Теперь, чтобы получить значение, хранящееся в конкретном элементе управления, легко:
string result = Form.Get(CtlPrefix + "XTest1")
Для радиоблоков, по крайней мере, Get возвращает выбранный индекс. Я предполагаю, что вы будете называть каждый флажок отдельно, так что вы можете просто отметить 0 или 1.
Надеюсь, это поможет!