创建动态文本框和获取值

时间:2011-10-06 09:33:48

标签: asp.net c#-4.0 c#-3.0

我想在用户点击添加更多链接按钮时创建动态文本框。 为此,我使用此代码。我必须提到我正在使用母版页。

  protected void lnkAddMore_Click(object sender, EventArgs e)
  {
        if (Request.Cookies["value"] != null)
        {
              i = Convert.ToInt32(Request.Cookies["value"].Value) + 1 ;
        }
        for (int k = 1; k <= i; k++)
        {
              LiteralControl literal = new LiteralControl();
              literal.Text = "<br /><br />";
              Label newLabel = new Label();
              newLabel.Text = "Choice" + " " + k.ToString();
              newLabel.ID = "lblChoice_" + k.ToString();
              newLabel.Attributes.Add("runat", "Server");
              this.panelLabel.Controls.Add(newLabel);
              this.panelLabel.Controls.Add(literal);

              LiteralControl literal1 = new LiteralControl();
              literal1.Text = "<br /><br />";
              TextBox nexText = new TextBox();
              nexText.ID = "txtChoice_" + k.ToString();
              nexText.Attributes.Add("TextMode", "MultiLine");
              nexText.Attributes.Add("runat", "Server");
              panelTextbox.Controls.Add(nexText);
              this.panelTextbox.Controls.Add(literal1);

              Response.Cookies["value"].Value = i.ToString();
              Session["Panel"] = panelTextbox;
        }
  }



  protected void Page_Load(object sender, EventArgs e)
  {
        if (!IsPostBack)
        {
           if (Session["Panel"] != null)
                    {
                          ContentPlaceHolder content=new ContentPlaceHolder();
                          content.Controls.Add(Session["Panel"] as Panel);
                    }
        }
  }

现在我在单击提交按钮后如何检索这些文本框的数据时遇到麻烦,以便我可以将文本框的值存储到数据库中。

为btnSave的点击事件编写的代码是什么

  protected void btnSave_Click(object sender, EventArgs e)
  {
     if (Session["Panel"] != null)
        {
              ContentPlaceHolder content_new = new ContentPlaceHolder();
              for (int i = 1; i <= count; i++)
              {
                    strControlName = "txtChoice_" + i.ToString();

                    TextBox objTextBox =              (TextBox)content_new.FindControl(strControlName);

                    strTextBoxValues[i] = objTextBox.Text;
                    string str3 = strTextBoxValues[2];
              }
        }
  }

此代码显示objTextBox的错误。错误是NullReferenceException。

如何编写用于保存上述代码数据的存储过程?

主要问题是处理参数声明,如何声明传递值的动态参数,以便为动态文本框保存值?

感谢。

4 个答案:

答案 0 :(得分:1)

我已经在这里回答了。

Lost dynamically created text box values

你可以试试这个。

private string GetValue(string ControlID)
{
   string[] keys = Request.Form.AllKeys;
   string value = string.Empty;
   foreach (string key in keys)
   {
     if (key.IndexOf(ControlID) >= 0)
     {
         value = Request.Form[key].ToString();
         break;
     }
   }

   return value;
}

然后获取值

string txtChoice1value = GetValue("txtChoice1");

答案 1 :(得分:0)

首先,当您动态创建控件时,不需要设置“runat = sever”。 问题在于这一行`ContentPlaceHolder content_new = new ContentPlaceHolder();`你创建了一个新的ContentPlaceHolder,这意味着它没有任何控件可供查找。

检查此页面。 How To Create TextBox Control Dynamically at Runtime

答案 2 :(得分:0)

您需要找到已创建的ContentPlaceHolder的引用 - < - p>

ContentPlaceHolder cnt =(ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1");

然后将Control中动态创建的ContentPlaceHolder添加为 -

cnt.Controls.Add(Session["Panel"] as Panel);

为什么每次创建新的ContentPlaceHolder,即使您提到使用的是masterPage,也必须存在ContentPlaceHolder ..

答案 3 :(得分:0)