0

ASP.NET Web ページで TextBoxes を生成したいと考えています。それは正常に動作します

    foreach (var Field in db.A_Settings)
    {
        TextBox t = new TextBox();
        t.ID = Field.ID.ToString();
        t.CssClass = "smallinput";
        t.Text = Field.Text;
        LabelPlaceHolder.Controls.Add(t);
    }

そして、それは次のようなものをうまく生成します:

<input name="ctl00$ContentPlaceHolder1$1" type="text" value="ValueA" id="ContentPlaceHolder1_1" class="smallinput">
<input name="ctl00$ContentPlaceHolder1$2" type="text" value="ValueB" id="ContentPlaceHolder1_4" class="smallinput">
<input name="ctl00$ContentPlaceHolder1$3" type="text" value="ValueC" id="ContentPlaceHolder1_5" class="smallinput">

それは正しいですが、実際には、次のような HTML でラップしたいと考えています。

<p>
    <label>Label for the first TextBox obtained from database</label>
    <span class="field">
        <input name="ctl00$ContentPlaceHolder1$1" type="text" value="ValueA" id="ContentPlaceHolder1_1" class="smallinput">
    </span>
</p>

このようにする方法が見つからなかったので、 に入れることを考えていましたList<TextBox>が、ここでも立ち往生しています(同じ問題-オブジェクトをHTMLでラップする方法がわかりません)。

これを行う方法はありますか?

「これらの TextBox を手動で追加してみませんか?」のような投稿については、画面に表示される処理が必要な数十のフィールドを含むSQLのダンプがある間、キーボードで頭を叩いている私の写真を送ります:)
またはキツネザルの写真。キツネも大丈夫

4

4 に答える 4

1

最もクリーンなソリューションではありませんが、うまくいくはずです...

foreach (var Field in db.A_Settings)
{
    TextBox t = new TextBox();
    t.ID = Field.ID.ToString();
    t.CssClass = "smallinput";
    t.Text = Field.Text;
    //add literal control containing html that should appear before textbox
    LabelPlaceHolder.Controls.Add(new LiteralControl("html before"));
    LabelPlaceHolder.Controls.Add(t);
    //add literal control containing html that should appear after textbox
    LabelPlaceHolder.Controls.Add(new LiteralControl("html after"));
}
于 2013-04-11T18:07:05.820 に答える
0

私はおそらく Repeater コントロールを使用します。

    <asp:Repeater ID="SettingsRepeater" runat="server">
        <ItemTemplate>
            <p>
                <asp:Label ID="ItemLabel" runat="server"></asp:Label>
                <span class="field">
                    <asp:TextBox ID="ItemTextbox" runat="server"></asp:TextBox>
                </span>
            </p>
        </ItemTemplate>
    </asp:Repeater>

リストをリピーターにバインドします。

SettingsRepeater.DataSource = db.A_Settings;
SettingsRepeater.DataBind();

次に、ItemDataBound コードを記述して、既存の値を設定します。

于 2013-04-11T18:20:03.093 に答える
0

HtmlGenericControlコントロールが必要です。

foreach (var Field in db.A_Settings)
{
    TextBox t = new TextBox();
    t.ID = Field.ID.ToString();
    t.CssClass = "smallinput";
    t.Text = Field.Text;

    var label = new HtmlGenericControl("label");
    label.Controls.Add(new LiteralControl("LABEL TEXT"));

    var p = new HtmlGenericControl("p");
    p.Controls.Add(label);

    var span = new HtmlGenericControl("span");
    span.Attributes.Add("class", "field");
    span.Controls.Add(t);
    p.Controls.Add(span);

    LabelPlaceHolder.Controls.Add(p);
}
于 2013-04-11T19:15:45.063 に答える
0

必要な HTML をレンダリングできるカスタム ASP.NET コントロールを作成できます。これを見てください: シンプルな ASP.NET サーバー コントロールの開発。このようにして、段落内に Textbox をレンダリングする CustomTextBox というコントロールを作成できます。

于 2013-04-11T20:23:52.917 に答える