我有一个TextBox,我在其中添加一个数字,然后在按钮上单击我创建新的文本框,具体取决于我在第一个TextBox中放入的数字。
例如,我在TextBox中按了5,然后按下按钮,我的页面上有5个新的文本框。
现在我试图在所有创建的文本框上创建一个RequiredFieldValidator,但我无法让它工作。我有另一个按钮,它插入我的数据库,所有新文本框中的值都是必需的。
有人可以查看我的代码,看看我是否在正确的轨道上,并可能帮助我修改代码,以便它可以工作。
protected void btnGenerateControl_Click(object sender, EventArgs e)
{
int Count = Convert.ToInt32(Qty.Text);
for (int i = 1; i <= Count; i++)
{
Label lbl = new Label();
TextBox txtbox = new TextBox();
RequiredFieldValidator rfv = new RequiredFieldValidator();
string ValidationGroup = "Group2";
string ErrorMessage = "Bitte Flotten ID eingeben";
lbl.Text = " Flotten ID " + (i).ToString() + " ";
txtbox.EnableViewState = true;
rfv.ControlToValidate = txtbox.Text;
rfv.ErrorMessage = ErrorMessage;
rfv.ValidationGroup = ValidationGroup;
rfv.ForeColor = System.Drawing.Color.Red;
Label lbl1 = new Label();
TextBox txtbox1 = new TextBox();
txtbox1.EnableViewState = true;
pnlTextBoxes.Controls.Add(lbl);
pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='FlottenID" + i + "'type='text' />"));
pnlTextBoxes.Controls.Add(lbl1);
lbl1.Text = " Bemerkungen: ";
pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='Info" + i + "'type='text' />"));
pnlTextBoxes.Controls.Add(new LiteralControl("<br /><br />"));
}
}
感谢您的帮助,RequiredFieldValidator现在正常工作,但在我的数据库中插入时,txtbox和txtbox1中的值为空。我现在插入错误了。
我现在需要改变什么?
protected void btnGenerateControl_Click(object sender, EventArgs e)
{
int Count = Convert.ToInt32(Qty.Text);
for (int i = 1; i <= Count; i++)
{
string ValidationGroup = "Group2";
string ErrorMessage = "Bitte Flotten ID eingeben";
Label lbl = new Label();
lbl.Text = " Flotten ID " + (i).ToString() + " ";
TextBox txtbox = new TextBox();
txtbox.EnableViewState = true;
txtbox.ID = "txt" + i;
TextBox txtbox1 = new TextBox();
txtbox.EnableViewState = true;
txtbox.ID = "txt" + i;
RequiredFieldValidator rfv = new RequiredFieldValidator();
rfv.ControlToValidate = txtbox.ID;
rfv.ErrorMessage = ErrorMessage;
rfv.ID = "rfv" + i;
rfv.ValidationGroup = ValidationGroup;
rfv.ForeColor = System.Drawing.Color.Red;
Label lbl1 = new Label();
lbl1.Text = " Bemerkungen: ";
pnlTextBoxes.Controls.Add(lbl);
//pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='FlottenID" + i + "'type='text' />"));
pnlTextBoxes.Controls.Add(txtbox);
pnlTextBoxes.Controls.Add(rfv);
pnlTextBoxes.Controls.Add(lbl1);
pnlTextBoxes.Controls.Add(txtbox1);
//pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='Info" + i + "'type='text' />"));
pnlTextBoxes.Controls.Add(new LiteralControl("<br /><br />"));
}
}
protected void btnAddOrder_Click(object sender, EventArgs e)
{
int Count = Convert.ToInt32(Qty.Text);
for (int i = 1; i <= Count; i++)
{
String query = "insert into Orders (CustID, OrderDate, Time, ProductID, ProjectID, Status, FlottenID, Info)values('" + CustID.Text + "','" + OrderDate.Text + "','" + Time.Text + "','" + ProductID.Value + "','" + ProjectID.Value + "','" + Status.Value + "','" + Request.Form["FlottenID" + i.ToString()] + "','" + Request.Form["Info" + i.ToString()] + "')";
String query1 = "commit;";
DataLayer.DataConnector dat = new DataLayer.DataConnector("Provider=SQLOLEDB; data source=rzwsrv010;database=event;user ID=event;password=event; Persist Security Info=False");
dat.DataInsert(query);
dat.DataInsert(query1);
}
Response.Redirect("NewOrder.aspx");
}
答案 0 :(得分:4)
在动态创建TextBox时,您应该为每个textBox指定一个ID
。
TextBox txtbox = new TextBox();
txtbox.ID="txt"+i; // This ID can be assigned values as per your own Logic.
现在需要使用RequiredFieldValidator:
RequiredFieldValidator rfv = new RequiredFieldValidator();
rfv.ID = "rfv" + i; // again assign ID values as per your own logic
完成此操作后,您需要将ID
TextBox
分配给ControlToValidate
RequiredFieldValidator.
的{{1}}属性。 ControlToValidate
属性通过控件的ID
进行验证,而不是像目前由您完成的Text属性。
rfv.ControlToValidate = txtbox.ID;
现在将上面生成的2个控件添加到您拥有的PlaceHolders中。您当前显示的代码似乎没有在任何地方添加这些控件。
最后,如果您尝试插入此文本框中的值,那么您可能还需要维护所有此类动态创建文本框的ViewState。一种可能的解决方案是在页面Load上重新生成所有这样的文本框。这需要对组织代码进行一些重新思考。如果您想确保这些文本框在回发后保持其状态,请继续此处:http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i
答案 1 :(得分:4)
您需要将RequiredFieldValidator控件添加到页面。即:你需要在某处添加:
pnlTextBoxes.Controls.Add(rfv)