0

C# のバック クラスから ASP.NET ページ (aspx) にチェック ボックス、ラベル、および DDL を追加しようとしています。CreateChildControls() メソッドでLiteralControl _liText = new LiteralControl();使用して表示できるように、ラベルを添付するために使用してい ます。this.Controls.Add(_liText);

DDL とチェック ボックスを C# コードから ASP.NET ページに追加して、ラベルが DDL とチェック ボックスと同じ行に表示されるようにするにはどうすればよいですか?

私はすでにこの構文を使用して DDL を作成しています:

List<DropDownList> _ddlCollection=new List<DropDownList>();
for (int i = 0; i < 5; i++)
            {
                _ddlCollection.Add(new DropDownList());
            }

CreateChildControls() から呼び出す this.Controls.Add() には問題はありません。ddl とチェック ボックスを埋める OnPreRender() メソッドです。LiteralControl クラスはこれに適していますか? OnPReRender() で試したことは次のとおりです。

 foreach (SPList list in web.Lists)
            {
                if (!list.Hidden)
                {
                    _liText.Text += @<input type="checkbox">;
                    _liText.Text += list.Title + "<br />";

                }
            }
4

2 に答える 2

2

コントロールは存在しますが、ページまたはユーザー コントロールはそれらを認識していません。

コントロールをページに追加する必要があります

Page.Controls.Add(_ddlCollection);

コントロールをページ上の他のコントロール (パネルなど) に追加することもできます。

panel1.Controls.Add(_ddlCollection);

あなたが望むものではないと私が思うドロップダウンのリストを追加しています。代わりに ListItems を追加する必要があります。

var dropDown = new DropDownList {Id = "dropDown1"};
dropDown.Items.Add(new ListItem("text", "value");

Page.Controls.Add(dropDown);

ドロップダウンのラベルを追加します。

Page.Controls.Add(new Label {AssociatedControlId = dropDown.Id, Text = "Drop me down"});

他のコントロールについても、同じプロセスに従います。

チェックボックスを追加する 本当に必要でない限り、html コントロールをリテラルに追加しないでください。コードビハインドでそのチェックボックスにアクセスできるようにしたい場合は、それをasp.netコントロールとして追加する必要があります。プレースホルダーを使用します。

placeHolder1.Controls.Add(new CheckBox {Id = "chkBox", Text="Tick me"});

チェックボックスのテキスト プロパティはチェック ボックスのラベルになり、テキストをクリックするとチェック ボックスにチェックを入れたり外したりします。

出力は

<label for="dropDown1" >Drop me down</label>
<select id="dropDown1" >
    <option value="value" >text</option>
</select>    

<input type="checkbox" id="chkbox" />
<label for="chkbox" >Tick me</label>
于 2013-04-25T08:39:40.953 に答える
1

まず、プレースホルダーを追加する必要があります。

<form id="form1" runat="server">
    <asp:PlaceHolder runat="server" ID="phMain"></asp:PlaceHolder>
</form>

次に、1 行追加する場合は、テーブルを使用します (単純ですが推奨されない方法です。次のステップでは、すべてをページに追加し、ページの CSS スタイルを設定します)。

protected override void CreateChildControls()
{
    base.CreateChildControls();
    Table table = new Table();
    for (int i = 0; i < 3; i++)
    {
        TableRow tr = new TableRow();

        TableCell tc1 = new TableCell();
        tc1.Controls.Add(new LiteralControl(String.Format("Line {0}",i)));
        tr.Cells.Add(tc1);

        TableCell tc2 = new TableCell();
        CheckBox chb = new CheckBox();
        chb.ID = String.Format("CheckBox_{0}", i);
        chb.Text = String.Format("CheckBox {0}", i);
        chb.CheckedChanged += chb_CheckedChanged;
        chb.AutoPostBack = true;
        tc2.Controls.Add(chb);
        tr.Cells.Add(tc2);

        TableCell tc3 = new TableCell();
        DropDownList ddl = new DropDownList();
        ddl.ID = String.Format("DropDownList_{0}", i);
        ddl.Items.Add("1111");
        ddl.Items.Add("2222");
        ddl.Items.Add("3333");
        ddl.SelectedIndex = i;
        ddl.Enabled = false;
        tc3.Controls.Add(ddl);
        tr.Cells.Add(tc3);


        table.Rows.Add(tr);
    }
    phMain.Controls.Add(table);
}

void chb_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chb = sender as CheckBox;
    string ddlid = chb.ID.Replace("CheckBox", "DropDownList");
    DropDownList ddl = this.Page.FindControl(ddlid) as DropDownList;
    if (ddl != null)
    {
        ddl.Enabled = chb.Checked;
    }
}
于 2013-04-25T08:57:52.337 に答える