簡體   English   中英

從C#asp.net中的文本框中獲取字符串

[英]Get string from textbox in C# asp.net

從使用鏈接按鈕添加的某些文本框中獲取字符串時,我遇到一些問題。 這段代碼可以通過單擊linkbutton來添加文本框,並且這些文本框被添加到面板上,但是我不知道如何在添加的這些文本框中獲取用戶編寫的字符串,而且我也無法保留該字符串。當我單擊鏈接按鈕以添加另一個文本框時,它們被寫在文本框中。 你能幫我嗎? 這是我的代碼:

public partial class _Default : Page
{
    Label myLabel1;
    Label myLabel2;
    protected void Page_Load(object sender, EventArgs e)
    {
        myLabel1 = new Label();
        myLabel2 = new Label();
        Panel1.Controls.Add(myLabel1);
        Panel2.Controls.Add(myLabel2);
        if (!Page.IsPostBack)
        {
            //Remove the session when first time page loads.
            Session.Remove("clicks");
            Session.Remove("clicks2");
        }

    }
    private void BuildTextBoxes(int rowCount1, int rowCount2)
    {
        for (int i = 0; i < rowCount1; i++)
        {
            TextBox TxtBoxU = new TextBox();
            TxtBoxU.ID = "TextBoxU" + i.ToString();
            //Add the labels and textboxes to the Panel.
            Panel1.Controls.Add(TxtBoxU);
        }

        myLabel1.Text = rowCount1 + "";

        for (int i = 0; i < rowCount2; i++)
        {
            TextBox TxtBoxU = new TextBox();
            TxtBoxU.ID = "TextBoxU" + i.ToString();
            //Add the labels and textboxes to the Panel.
            Panel2.Controls.Add(TxtBoxU);
        }

        myLabel2.Text = rowCount2 + "";
    }

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        int rowCount1 = 0;
        //initialize a session.
        rowCount1 = Convert.ToInt32(Session["clicks"]);
        rowCount1++;
        //In each button clic save the numbers into the session.
        Session["clicks"] = rowCount1;
        BuildTextBoxes(rowCount1, Convert.ToInt32(Session["clicks2"]));

    }

    protected void LinkButton2_Click(object sender, EventArgs e)
    {
        int rowCount2 = 0;
        //initialize a session.
        rowCount2 = Convert.ToInt32(Session["clicks2"]);
        rowCount2++;
        //In each button clic save the numbers into the session.
        Session["clicks2"] = rowCount2;
        BuildTextBoxes(Convert.ToInt32(Session["clicks"]), rowCount2);
    }

}

非常感謝。

要閱讀文本框,您需要在回發時執行以下操作:

var result = Request.Form["textboxId"]

您需要做幾件事。 由於您是動態生成這些文本框的,因此您需要在每次頁面處理(甚至是回發)時都生成它們。 還需要在加載viewstate之前生成它們。

每次加載頁面時,您都需要在面板中重新創建文本框,這應該在page_init函數中發生(需要在加載viewstate之前發生)。

有關ASP.Net頁面生命周期的更多信息: ASP.NET頁面生命周期概述

以下代碼是我認為您正在尋找的代碼:

Label myLabel1;
Label myLabel2;

/// <summary>
/// Add the dynamic controls to the page before the viewstate is 
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void page_init(object sender, EventArgs e)
{      
  myLabel1 = new Label();
  myLabel2 = new Label();
  Panel1.Controls.Add(myLabel1);
  Panel2.Controls.Add(myLabel2);

  var box1Count = 0;
  box1Count = Convert.ToInt32(Session["clicks"]);

  var box2Count = 0;
  box2Count = Convert.ToInt32(Session["clicks2"]);

  BuildTextBoxes(box1Count, box2Count);
}

/// <summary>
/// Ensure first time loads properly setup the page.
/// </summary>
protected void Page_Load(object sender, EventArgs e)
{ 
  if (!Page.IsPostBack)
  { 
    //Remove the session when first time page loads.
    Session.Remove("clicks");
    Session.Remove("clicks2");

    //Set the Text Boxes and lables to zero.
    BuildTextBoxes(0, 0);
  }
}

/// <summary>
/// Add any new text boxes to the screen.
/// </summary>
/// <param name="rowCount1">The total number of text boxes in the first group.</param>
/// <param name="rowCount2">The total number of text boxes in the second group.</param>
private void BuildTextBoxes(int rowCount1, int rowCount2)
{

  var panel1Count = Panel1.Controls.Count;    //Current number of text boxes
  panel1Count--;                              //Remove the Label control from the count
  for (int i = panel1Count; i < rowCount1; i++)
  {
    TextBox TxtBoxU = new TextBox();
    TxtBoxU.ID = "TextBox1U" + i.ToString();  //Ensure a globally unique name.
    Panel1.Controls.Add(TxtBoxU);             //Add the labels and textboxes to the Panel.
  }
  myLabel1.Text = rowCount1.ToString();

  var panel2Count = Panel2.Controls.Count;    //Current number of text boxes
  panel2Count--;                              //Remove the Label control from the count
  for (int i = panel2Count; i < rowCount2; i++)
  {
    TextBox TxtBoxU = new TextBox();          
    TxtBoxU.ID = "TextBox2U" + i.ToString();  //Ensure a globally unique name;
    Panel2.Controls.Add(TxtBoxU);             //Add the labels and textboxes to the Panel.
  }
  myLabel2.Text = rowCount2 + "";
}

/// <summary>
/// Add another textbox to the first group.
/// </summary>
protected void LinkButton1_Click(object sender, EventArgs e)
{
  int rowCount1 = 0;
  //initialize a session.
  rowCount1 = Convert.ToInt32(Session["clicks"]);
  rowCount1++;
  //In each button click save the numbers into the session.
  Session["clicks"] = rowCount1;
  BuildTextBoxes(rowCount1, Convert.ToInt32(Session["clicks2"]));
}

/// <summary>
/// Add another textbox to the second group.
/// </summary>
protected void LinkButton2_Click(object sender, EventArgs e)
{
  int rowCount2 = 0;
  //initialize a session.
  rowCount2 = Convert.ToInt32(Session["clicks2"]);
  rowCount2++;
  //In each button clic save the numbers into the session.
  Session["clicks2"] = rowCount2;
  BuildTextBoxes(Convert.ToInt32(Session["clicks"]), rowCount2);
}

+1表示所有這些需要在加載viewstate之前發生。 如果沒有人閱讀Infinities Loop上的“動態控件和視圖狀態”文章,我強烈建議他們這樣做:-

動態控制

觀看狀態

既出色又能解釋細節。

暫無
暫無

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

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