0

特定の条件に基づいて、page_load() でいくつかのチェックボックス、ドロップダウンリスト、およびテキストボックスを動的に作成しました。同じページに、設計時に (aspx ページで) 作成された [送信] ボタンがあります。[送信] ボタンのクリック イベント ハンドラーで、ドロップダウン リストなどからチェックされ、選択された値をすべて取得する必要があります。しかし、これらのコントロールは設計時ではなく page_load で作成されるため、できませんでした任意の値を取得します。値を取得する方法はありますか?

アップデート:

あと 2 つの問題が残っています。

drp.selectedIndex は常に -1 ではなく 0 に初期化されます。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

Page_Load の代わりに Page_Init を使用します。

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