2011-10-06 61 views
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。

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

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

谢谢。

回答

0

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

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

0

你需要找到的你已经创建ContentPlaceHolder喜欢 -

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

参考,然后在ContentPlaceHolder原样

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

添加动态创建Control为什么你即使您提到过您,每次都会创建一个新的ContentPlaceHolder e。使用母版,所以必须存在的ContentPlaceHolder ..

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");