基于某些条件,我在page_load()中动态创建了一些复选框,下拉列表和文本框。在同一页面中,我有一个在设计时创建的提交按钮(在aspx页面中)。现在,在提交按钮的单击事件处理程序中,我需要从下拉列表中获取所有已选中的复选框和选定的值等。但由于这些控件是在page_load中创建的,而不是在设计时,我不能得到任何价值。有什么方法可以得到这些价值观吗?
更新
我还有两个问题:
drp.selectedIndex始终初始化为0而不是-1。我在Page_Init中添加了drp.selectedIndex = -1。但是在cmdShow_Click中,drp.selectedIndex为0。
此外,文本框的可见性由复选框控制。我有以下代码。但在回发期间,即使选中复选框,文本框也不会显示。有没有办法解决它?
CheckBox cb = new CheckBox();
cb.ID = "cb" + id;
cb.ClientIDMode = ClientIDMode.Static;
cell.Controls.Add(cb);
cell.Controls.Add(new LiteralControl("<br />"));
TextBox tb = new TextBox();
tb.ID = "txt" + id;
tb.ClientIDMode = ClientIDMode.Static;
tb.Attributes.Add("style", "display:none");
cb.Attributes.Add("onclick", "return cbOtherClicked('" + cb.ClientID + "', '" + tb.ClientID + "')");
cell.Controls.Add(tb);
cell.Controls.Add(new LiteralControl("<br />"));
function cbOtherClicked(control1, control2) {
var cbOther = document.getElementById(control1);
var txtOther = document.getElementById(control2);
if (cbOther.checked) {
txtOther.style.display = "block";
}
else {
txtOther.style.display = "none";
}
}
答案 0 :(得分:1)
使用Page_Init而不是Page_Load:
ASPX:
<asp:Panel ID="Panel1" runat="server"></asp:Panel>
<asp:Button ID="cmdShow" runat="server" onclick="cmdShow_Click" Text="Show" /><br />
<asp:Label ID="Label1" runat="server" EnableViewState="False"></asp:Label>
代码背后:
protected void Page_Init(object sender, EventArgs e)
{
CheckBox chk = new CheckBox();
chk.ID = "chk1";
Panel1.Controls.Add(chk);
DropDownList drp = new DropDownList();
drp.ID = "drp1";
drp.Items.Add(new ListItem("... Select ...",string.Empty));
drp.Items.Add(new ListItem("ali","0"));
drp.Items.Add(new ListItem("joseph", "1"));
drp.Items.Add(new ListItem("mehdi", "2"));
Panel1.Controls.Add(drp);
TextBox txt1 = new TextBox();
txt1.ID = "txt1";
Panel1.Controls.Add(txt1);
}
protected void cmdShow_Click(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)Form.FindControl("chk1");
DropDownList drp = (DropDownList)Form.FindControl("drp1");
TextBox txt1 = (TextBox)Form.FindControl("txt1");
string result = "";
result += chk.Checked ? "CheckBox: Checked<br>" : "CheckBox: Unchecked<br>";
result += drp.SelectedIndex!=-1 ? "DropDownList:"+drp.SelectedItem.Text+"<br>": "DropDownList: Not select<br>";
result += string.IsNullOrEmpty(txt1.Text) ? "TextBox= Empty" : "TextBox= " + txt1.Text;
Label1.Text = result;
}