1

TextBoxes を動的に追加しています。送信ボタンをクリックしてポストバックすると、TextBoxes に入力された値が表示されず、すべて空になります。これが .aspx ページです...\

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

        </asp:PlaceHolder>
        <br /><br />
        <asp:Button ID="btnAddForm" runat="server" Text="Add Form" OnClick="btnAddForm_Click" />
        <asp:Button ID="btnSubmitForms" runat="server" Text="Submit Forms" OnClick="btnSubmit_Click" />
    </form>

... btnAddForm をクリックしてフォームに TextBoxes を追加する方法は次のとおりです...

protected void btnAddForm_Click(object sender, EventArgs e)
        {
            // Create Labels
            Label lblName = new Label();
            lblName.Text = "NAME:";
            Label lblNumber = new Label();
            lblNumber.Text = "NUMBER:";
            Label lblAddress = new Label();
            lblAddress.Text = "ADDRESS:";
            Label lblCompany = new Label();
            lblCompany.Text = "COMPANY:";

            // Create Text Boxes
            TextBox txtName = new TextBox();
            TextBox txtNumber = new TextBox();
            TextBox txtAddress = new TextBox();
            TextBox txtCompany = new TextBox();

            // Create submit button
            Button btnSubmit = new Button();
            btnSubmit.Text = "SUBMIT";

            // Create panel and add controls
            Panel pnlForm = new Panel();
            pnlForm.Controls.Add(lblName);
            pnlForm.Controls.Add(txtName);
            pnlForm.Controls.Add(new LiteralControl("<br /><br />"));
            pnlForm.Controls.Add(lblNumber);
            pnlForm.Controls.Add(txtNumber);
            pnlForm.Controls.Add(new LiteralControl("<br /><br />"));
            pnlForm.Controls.Add(lblAddress);
            pnlForm.Controls.Add(txtAddress);
            pnlForm.Controls.Add(new LiteralControl("<br /><br />"));
            pnlForm.Controls.Add(lblCompany);
            pnlForm.Controls.Add(txtCompany);
            pnlForm.Controls.Add(new LiteralControl("<hr />"));
            pnlForm.Controls.Add(new LiteralControl("<br /><br />"));
            panels.Add(pnlForm);

            foreach (Control panel in panels)
            {
                phFormContent.Controls.Add(panel);
            }
        }

...そして、追加された個々のパネルごとにフィールドを抽出する方法を次に示します...

private static void GetFormFields(Control panelControl)


   {
        ControlCollection controls = panelControl.Controls;
        foreach (Control childControl in panelControl.Controls)
        {
            if (childControl.GetType().ToString() == "System.Web.UI.WebControls.TextBox")
            {
                TextBox txt = childControl as TextBox;
                fields.Add(txt);
            }
            else
            {
                GetFormFields(childControl);
            }
        }
    }

パネルとフィールドは静的リストで、各パネルには 4 つのフィールドが含まれます。GetFormFields に個々のパネル参照を渡します...

private static List<Control> panels = new List<Control>();
        private static List<TextBox> fields = new List<TextBox>();
4

2 に答える 2

2

Page_Initイベントに動的に追加してみてください。通常、これにより、PostBack. これができない場合は、 に保存して手動でデータを保存することを検討する必要がありますViewState

于 2013-07-10T22:13:22.077 に答える
1

テキスト ボックスがページの VIEWSTATE に含まれていないように見えるため、ポストバックで失われます。

このシナリオで何が起こるかについての詳細は次のとおりです。

http://msdn.microsoft.com/en-us/library/kyt0fzt1(v=VS.71).aspx

于 2013-07-10T22:06:17.463 に答える