我想在用户点击添加更多链接按钮时创建动态文本框。 为此,我使用此代码。我必须提到我正在使用母版页。
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 :(得分: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,这意味着它没有任何控件可供查找。
答案 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)