保存动态创建文本框的值
本文关键字:文本 动态 创建 保存 | 更新日期: 2023-09-27 18:01:27
伙计们,我正在创建动态文本框每次按钮被点击。但是一旦我有了任意多的文本框…我想保存这些值数据库表..请指导如何保存到DB
public void addmoreCustom_Click(object sender, EventArgs e)
{
if (ViewState["addmoreEdu"] != null)
{
myCount = (int)ViewState["addmoreEdu"];
}
myCount++;
ViewState["addmoreEdu"] = myCount;
//dynamicTextBoxes = new TextBox[myCount];
for (int i = 0; i < myCount; i++)
{
TextBox txtboxcustom = new TextBox();
Literal newlit = new Literal();
newlit.Text = "<br /><br />";
txtboxcustom.ID = "txtBoxcustom" + i.ToString();
myPlaceHolder.Controls.Add(txtboxcustom);
myPlaceHolder.Controls.Add(newlit);
dynamicTextBoxes = new TextBox[i];
}
}
您必须最迟在Page_Load
中重新创建动态控件,否则ViewState
无法正确加载。然而,你可以在事件处理程序中添加一个新的动态控件(在页面生命周期的page_load之后发生)。
所以addmoreCustom_Click
对于重新创建所有已经创建的控件来说太晚了,但是添加一个新控件或读取Text
并不晚。
所以像这样的东西应该可以工作(未经测试):
public void Page_Load(object sender, EventArgs e)
{
if (ViewState["addmoreEdu"] != null)
{
myCount = (int)ViewState["addmoreEdu"];
}
addControls(myCount);
}
public void addmoreCustom_Click(object sender, EventArgs e)
{
if (ViewState["addmoreEdu"] != null)
{
myCount = (int)ViewState["addmoreEdu"];
}
myCount++;
ViewState["addmoreEdu"] = myCount;
addControls(1);
}
private void addControls(int count)
{
int txtCount = myPlaceHolder.Controls.OfType<TextBox>().Count();
for (int i = 0; i < count; i++)
{
TextBox txtboxcustom = new TextBox();
Literal newlit = new Literal();
newlit.Text = "<br /><br />";
txtboxcustom.ID = "txtBoxcustom" + txtCount.ToString();
myPlaceHolder.Controls.Add(txtboxcustom);
myPlaceHolder.Controls.Add(newlit);
}
}
列举PlaceHolder
-Controls来查找TextBoxes
或使用Linq:
private void saveData()
{
foreach (TextBox txt in myPlaceHolder.Controls.OfType<TextBox>())
{
string text = txt.Text;
// ...
}
}
快速和肮脏的方法将只是迭代表单集合寻找适当的值:
if (Page.IsPostBack)
{
string name = "txtBoxcustom";
foreach (string key in Request.Form.Keys)
{
int index = key.IndexOf(name);
if (index >= 0)
{
int num = Int32.Parse(key.Substring(index + name.Length));
string value = Request.Form[key];
//store value of txtBoxcustom with that number to database...
}
}
}
要获取回发时动态创建的控件的值,您需要在Page_Init事件上重新创建这些控件然后这些控件的viewstate会被加载你会得到控件和它们的值
public void Page_Init(object sender, EventArgs e)
{
addControls(myCount);
}
我希望这将解决你的问题快乐编码