当前位置: 首页 > 知识库问答 >
问题:

在C#ASP.NET中从textbox中获取字符串

莫典
2023-03-14
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);
    }

}

太感谢你了。

共有1个答案

华宏逸
2023-03-14

有几件事你需要做。因为您是动态生成这些文本框的,所以您需要在每次处理页面(甚至回发)时生成它们。它们还需要在加载viewstate之前生成。

每次加载页面时,您都需要在面板中重新创建TextBoxs,这应该发生在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);
}
 类似资料:
  • 问题内容: 我有一个字符串(基本上是遵循命名约定的文件名) 我想在第一个(即一个点)之前提取子字符串 在java doc api中,我似乎找不到在String中执行此操作的方法。 我想念什么吗?怎么做? 问题答案: 看看和。 确保检查的-1 。

  • 这是我的代码。我正在使用role=“textbox”并从中获取值。但是,当我在textbox中输入多行文本时,它会给出多行的值。如何在单行中获得该值?

  • 问题内容: 我在JavaScript中有一个字符串,例如“#box2”,我只想从中获得“ 2”。 尝试过: 它仍然在警报中返回#box2,我该如何使其正常工作? 它需要容纳末尾附加的任何长度的数字。 问题答案: 对于此特定示例, 在一般情况下: 由于这个答案由于某种原因而受到欢迎,因此有一个好处:正则表达式生成器。

  • 我有这样一个JSON文件: 我需要得到回应。使用者用户名值。我试过这个: 但我得到了这个错误: 怎么修,肯定有办法,就是找不到。

  • 问题内容: 即时通讯正在处理日期,并且我在从字符串中获取日期时遇到问题,我在这里简化了我的问题: 输出为:“ 25-05-2015”(可以),“ 2014年12月21日,上午12:00”(???) 问题答案: 那里的问题是为了。您必须使用。顺便说一句,不要忘记将日期格式设置的语言环境设置为“ en_US_POSIX” 。 如果您使用固定格式的日期,则应首先将日期格式器的语言环境设置为适合您的固定格

  • 问题内容: 我有一个字符串,我想从中获取一些值。 我的字符串看起来像: 字符串1: 字串2: 不幸的是,存在这样一种情况,字符串将具有相同的概念,但是没有一些参数: 字串3: 我怎样才能得到的值:,,,,? 任何帮助表示赞赏! 问题答案: 您的字符串是JSON格式的,因此您需要将其 解析 为一个对象。为此,您可以使用JSON.NET。 这是有关如何将JSON字符串解析为动态对象的示例: 编码愉快!