У меня есть asp:panel
, что при нажатии кнопки я добавляю некоторое количество флажков динамически.Проверяется динамически генерируемый флажок == False при обратной передаче
На другой щелчок на кнопке, мне нужно посмотреть эти флажки и проверить, отмечены ли они.
Это следующий вопрос, который я опубликовал ранее. Первая проблема заключалась в том, что я не мог найти динамически созданные элементы управления при обратной передаче.
Теперь я могу их найти. Проблема заключается в том, что свойство Checked
всегда неверно, несмотря на то, что флажок установлен в пользовательском интерфейсе.
разметки с панелью, что флажки получить помещены в, и две кнопки:
<asp:Panel runat="server" ScrollBars="Vertical" ID="pnlEmailCheckboxes" Height="150">
<br/>
<asp:CheckBox runat="server" Text="Other" ID="cbOtherEmail"/>
<asp:TextBox ID="txtOtherEmail" runat="server" Style="width: 270px;" CssClass="textbox-default"></asp:TextBox>
<br/>
</asp:Panel>
<asp:LinkButton ID="btnSendEmail" Text="<span>Send Email</span>" runat="server" CssClass="page-footer-button-highlight" OnClick="btnSendEmail_Click"></asp:LinkButton>
<asp:LinkButton ID="btnCloseEmail" Text="<span>Close</span>" runat="server" CssClass="page-footer-button" CausesValidation="false" OnClick="btnCloseEmail_OnClick"></asp:LinkButton>
События, которое генерирует текстовые поля:
protected void btnEmail_Click(object sender, EventArgs e)
{
List<CheckBox> cbList = new List<CheckBox>();
for (int i = 0; i < 10; i++)
{
CheckBox cb = new CheckBox();
cb.Text = "text" + i;
cb.ID = Guid.newGuid().ToString();
cb.ClientIDMode = ClientIDMode.Static;
pnlEmailCheckboxes.Controls.AddAt(0, cb);
pnlEmailCheckboxes.Controls.AddAt(0, new LiteralControl("<br/>"));
cbList.Add(cb);
}
Session["checkboxes"] = cbList;
mpeEmail.Show();
}
Кнопка, которая пытается извлечь текстовые поля (не работает):
protected void btnSendEmail_Click(object sender, EventArgs e)
{
//the email recipients
List<string> emailRecipients = new List<string>();
List<CheckBox> cbList = (List<CheckBox>)Session["checkboxes"];
foreach (CheckBox cb in cbList)
{
CheckBox cbClient = (CheckBox) pnlEmailCheckboxes.FindControl(cb.ClientID); //I've also tried to find it by cb.ID
//ALWAYS FALSE
if (cbClient.Checked) emailRecipients.Add(cb.Text.Trim());
}
//Ive also tried this, it does not contain the dynamically generated checkboxes
//var cbControls = pnlEmailCheckboxes.Controls.OfType<CheckBox>();
}
Edit:
На стороне клиента html отображается даже с идентификатором, который соответствует ID, который я ищу.
<input id="00e3a485-2083-4ef8-810b-6ed4fb1f62f9" type="checkbox" name="ctl00$Body$00e3a485-2083-4ef8-810b-6ed4fb1f62f9">
Я предпочитаю использовать повторитель флажков вместо их динамического добавления. В вашем случае вам нужно снова создать флажки после обратной передачи (OnLoad). Аналогичный вопрос: http://stackoverflow.com/questions/17589268/dynamically-created-controls-losing-data-after-postback – Emanuele
@ Emanuele Я действительно создаю элементы управления для обратной передачи, однако эта ссылка приводит меня к осознанию того, что для повторного создания элементов управления необходимо иметь те же идентификаторы, что и старые элементы управления, которые должны быть сопоставлены с повторно созданными элементами управления. Благодарю. –
Ницца. Могу ли я предложить использовать «более контролируемое» соглашение об именах для флажков? EG chk1, chk2 ... – Emanuele