【问题标题】:problem with dynamic textBoxes , how to store textValues动态文本框的问题,如何存储文本值
【发布时间】:2011-07-02 03:45:03
【问题描述】:

我有一个问题困扰了我三天。

在我的网络表单上,我想有一个按钮,点击它我想在 asp:PlaceHolder 中动态创建五个文本框。

我希望,即使在 postBack 之后,我在这个 texBoxes 中输入的值也会被保存。使用第二个按钮,我想存储它们。

我已经阅读了有关页面生命周期、viewState、IsPostBack 的文章...很多动态创建控件的文章,但我仍然无法对此进行编程。

我尝试了几种方法,但都没有成功。下面是我的“杰作”的最后一个版本。请帮我完成这个任务,因为它让我恶心。谢谢,马丁

namespace DynamicCreate
{
    public partial class _Default : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.TextBox textBox;

        private TextBox[] my_dynamicTextBoxes = new TextBox[5];
        private string[] textBoxValues = new string[5];

        protected void Page_Load(object sender, System.EventArgs e)
        {
            btn_save_tb_values.Click += new EventHandler(save_btnClick);
            but_load_tb.Click += new EventHandler(creat_tb_btnClick);

            int i = 0;
            foreach (TextBox tb in my_dynamicTextBoxes)
            {
                if (ViewState["c_textBox" + i.ToString()] != null)
                {
                    tb.Text = (string)ViewState["c_textBox" + i.ToString()];
                    i++;
                }
                else
                {
                    textBox = new TextBox();
                    textBox.ID = "c_textBox" + i.ToString();
                    my_dynamicTextBoxes[i] = textBox;
                    i++;
                }
            }
        }

        protected void creat_tb_btnClick(object sender, EventArgs e)
        {
            int i = 0;
            foreach (TextBox neww in my_dynamicTextBoxes)
            {
                c_placeholder.Controls.Add(neww);
                c_placeholder.Controls.Add(new LiteralControl("<br>"));
                ViewState["c_textBox" + i.ToString()] = neww.Text;
                i++;
            }
        }

        protected void save_btnClick(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++) {}
        }
    }
}



<form id="form1" runat="server">
        <div>
            <div>  <asp:PlaceHolder ID="c_placeholder" runat="server"></asp:PlaceHolder>    </div>
            <div>   <asp:Button runat="server" ID="but_load_tb"  Text="Dodaj Polja!!"/>       </div>
            <div>   <asp:Button runat="server" ID="btn_save_tb_values" Text="Izpisi Vrednosti!" />   </div
        </div>
    </form>

【问题讨论】:

    标签: c# asp.net textbox dynamic


    【解决方案1】:

    这是我想出的一个简单示例,它会在您单击“创建”按钮时动态地将 5 个文本框添加到占位符,并在您单击“保存”按钮时显示值:

    Default.aspx:

    <asp:PlaceHolder ID="phButtons" runat="server" />
    <asp:Button ID="btnCreate" Text="Create" runat="server" onclick="btnCreate_Click" />
    <asp:Button ID="btnSave" Text="Save" runat="server" onclick="btnSave_Click" />
    

    Default.aspx.cs:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (ViewState["buttons"] != null)
            CreateButtons();
    }
    
    protected void btnCreate_Click(object sender, EventArgs e)
    {
        ViewState["buttons"] = true;
        CreateButtons();
    }
    
    protected void btnSave_Click(object sender, EventArgs e)
    {
        if (ViewState["buttons"] != null)
        {
            // Save the button information.
            foreach (Control ctl in phButtons.Controls)
            {
                string x;
                if (ctl is TextBox)
                    x = (ctl as TextBox).Text;
            }
        }
    }
    
    private void CreateButtons()
    {
        for (int iLoop = 0; iLoop < 5; iLoop++)
        {
            phButtons.Controls.Add(new TextBox() { ID = "txt" + iLoop });
        }
    }
    

    【讨论】:

      【解决方案2】:

      这行不通,伙计。

      当“点击”事件发生时,无法添加需要回发信息(如视图状态等)的控件。只需尝试在单击事件上添加一个按钮,动态按钮将不起作用。就是这样。你必须有所不同。

      从头开始创建文本框,将它们添加到占位符。

      将它们隐藏起来:mycontrol.visible = false

      然后在点击事件中,尽可能多地选择“mycontrol”来访问它们、启用它们、设置它们的值并设置其可见性。当“mycontrol”s 设置为 onInit 时,您将没有问题!

      private l as new List(of textbox)
      protected sub onload()
        for i = 0 to 10
          dim txt as new textbox
          txt.visible = false
          l.add(txt)
          me.controls.add(txt)
        end for
      end sub
      
      
      protected sub onClick()
         dim controlsCountNeeded = 4
         dim q = (from i in me.l where i.visible = false).take(4)
         for each item in q
             item.visible = true
         end for
      end sub
      

      只是一个简单的例子-...

      【讨论】:

        猜你喜欢
        • 2013-03-14
        • 2021-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-04
        • 2012-01-04
        • 1970-01-01
        • 2013-07-08
        相关资源
        最近更新 更多