簡體   English   中英

在aspx.cs(在后面的代碼)asp.net中創建RequiredFieldValidator

[英]Make RequiredFieldValidator in aspx.cs (code behind) asp.net

我有一個TextBox,在其中添加一個數字,並在buttonclick上創建新的文本框,具體取決於我在第一個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");
    }

動態創建文本框時,應為每個文本框分配一個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

完成此操作后,需要將TextBoxID分配給RequiredFieldValidator.ControlToValidate屬性RequiredFieldValidator. ControlToValidate屬性實際上采用Control的ID進行驗證,而不是像您當前所做的Text屬性那樣。

rfv.ControlToValidate = txtbox.ID;

現在,將上面生成的2個控件添加到您擁有的PlaceHolders中。 您目前顯示的代碼似乎沒有在任何位置添加這些控件。

最后,如果您嘗試插入放置在此文本框中的值,那么可能還需要維護所有這些動態創建的文本框的ViewState。 一種可能的解決方案是在“加載”頁面上重新生成所有此類文本框。 這將需要對組織代碼進行一些重新思考。 如果您要確保這些文本框在回發后保持其狀態,請繼續此處: http : //www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i

您需要將RequiredFieldValidator控件添加到頁面。 即:您需要將此添加到某處:

pnlTextBoxes.Controls.Add(rfv) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM