0

基于某些条件,我在 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";
        }
    }
4

1 回答 1

1

Use Page_Init instead of 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>

Code behind:

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;
}
于 2013-09-05T20:48:27.193 回答