创建多个文本框用户控件

时间:2013-11-25 10:41:29

标签: c# asp.net controls

我正在尝试构建一个UserControl,允许用户根据需要使用尽可能多的TextBox。

我的流程:

  1. 用户看到“+”按钮
  2. 点击该按钮将在当前文本框下方添加一个新文本框
  3. 每个文本框的名称为:“name_numberOfTextBox”。例如:首先是“textbox_1”,第二个是“textbox_2”等。
  4. 我的问题:

    1. .Net在渲染页面时弄乱了我的名字,为每个名字添加了“myControlName”..
    2. .Net正在弄乱我的ID - 它为每个TextBox提供了不同的ID,这使得我无法使用Page.FindControl方法来获取文本TextBox
    3. 每次单击“+”按钮,它都会添加一个新的TextBox,但会删除之前TextBox中已输入的内容(因为再次调用页面生命周期)。
    4. 这是我的代码:

      public partial class MultipleTextBox : System.Web.UI.UserControl
      {
      
          private readonly string SESSION_TEXTBOX_LIST = "textboxList";
      
          private readonly string SESSION_NAME = "multipleTextBoxName";
      
          private List<TextBox> textBoxList;
      
          private string name;
      
          protected void Page_Load(object sender, EventArgs e)
          {
              if (!IsPostBack)
              {
                  btnRemove.Visible = false;
                  Session[SESSION_TEXTBOX_LIST] = null;
                  Session[SESSION_NAME] = null;
                  textBoxList = new List<TextBox>();
                  Session[SESSION_TEXTBOX_LIST] = textBoxList;
                  return;
              }
              if (Session[SESSION_NAME] != null)
                  name = (string)Session[SESSION_NAME];
              if (Session[SESSION_TEXTBOX_LIST] != null)
                  textBoxList = (List<TextBox>)Session[SESSION_TEXTBOX_LIST];
          }
      
          protected void btnAdd_Click(object sender, EventArgs e)
          {
              textBoxList.Add(createTextBox());
              ShowTextboxes();
              btnRemove.Visible = true;
          }
      
          protected void btnRemove_Click(object sender, EventArgs e)
          {
              TextBox textBox = (TextBox)container.FindControl(name + "_" + textBoxList.Count);
              textBoxList.Remove(textBox);
              container.Controls.Remove(textBox);
          }
      
          private TextBox createTextBox()
          {
              TextBox textbox = new TextBox();
              textbox.Attributes["name"] = name + "_" + (textBoxList.Count + 1);
              textbox.Attributes["id"] = name + "_" + (textBoxList.Count + 1);
              return textbox;
          }
      
          private void ShowTextboxes()
          {
              if (textBoxList == null || name == null)
                  return;
              foreach (TextBox textBox in textBoxList)
              {
                  container.Controls.Add(textBox);
                  container.Controls.Add(new LiteralControl("<br/>"));
              }
          }
      
          public string Name
          {
              get
              {
                  return this.name;
              }
              set
              {
                  this.name = value;
              }
          }
      }
      

0 个答案:

没有答案