【问题标题】:Creating aspx textbox from codebehind从代码隐藏创建 aspx 文本框
【发布时间】:2012-06-13 13:43:52
【问题描述】:

如何在 C# 中从代码后面创建 aspx 文本框以及如何在代码后面访问它的值?我按照以下方式进行操作,但在每个帖子背面的文本框都被清除。我需要在回帖中保留它的价值观。

TextBox txt = new TextBox();
txt.ID = "strtxtbox";
txt.CssClass = "CSS1";
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
txt.RenderControl(htmlWriter);

//lbl is an aspx label
lbl.text += @"<td style='width: 5%;'>" + sb.ToString() + "</td>";

我按如下方式访问文本框值

string tb = Request.Form["strtxtbox"].ToString();

【问题讨论】:

  • 文本框 myTextBox=new TextBox();
  • 您能否详细说明您正在尝试做什么?如果您在代码隐藏中处理所有内容,您将在从 TextBox 获取输入和读取时遇到很多麻烦。这是可能的,只是非常丑陋和非常糟糕的代码。如果您提供更多详细信息,那就太好了。
  • 请看我更新的问题

标签: c# asp.net


【解决方案1】:

您可以从创建 TextBox 控件开始。必须在Init() (Page_Init()) 或PreInit() (Page_PreInit()) 方法中完成,无论Page.IsPostBack 都必须这样做。这将在加载 ViewState 之前将元素放在页面上,并允许您在回发时检索值。

var textBox = new TextBox();

然后你应该在它上面设置一些属性,包括一个 ID,这样你以后可以找到它:

textBox.ID = "uxTxtSomeName";
textBox.MaxLength = 10; // maximum input length
textBox.Columns = 20; // character width of the textbox
etc...

然后您需要将其添加到页面上的适当容器(Page,或您希望它出现在其中的任何控件):

parentControl.Controls.Add(textBox);

然后在回发时,您可以使用父级的FindControl() 函数在Load() 方法(Page_Load())中检索值:

var input = (parentControl.FindControl("uxTxtSomeName") as TextBox).Text;

注意:内置的 FindControl() 只遍历直接子级。如果您想搜索整个嵌套服务器控件树,您可能需要实现自己的 recursive FindControl() 函数。不过,在 [so] 上有一百万零一个递归 FindControl() 函数的示例,所以我将把它留给你。

【讨论】:

  • 如果他将变量设为类级变量,那么在 Load() 方法中,他可以只引用他在 Init() 中创建的 textBox 变量,而不必使用 findControl
【解决方案2】:

问题是控件在回发时不可用,除非您每次都重新创建它,这是有问题的。

我过去使用的一个解决方案是 DynamicControlsPlaceholder,您可以查看here

【讨论】:

    【解决方案3】:
    【解决方案4】:

    根据注释中的代码创建文本框

    TextBox myTextBox=new TextBox();
    

    但是,您必须设置 ID/名称。此外,您必须在每次回发、预渲染或之前创建文本框,以便填充该值。如果您将文本框的创建延迟到页面生命周期的后期,则不会从回发中填充该值,然后您必须手动从 Request.Response[] 集合中检索它。

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多