从代码隐藏创建 aspx 文本框

本文关键字:文本 aspx 创建 代码 隐藏 | 更新日期: 2023-09-27 18:36:58

如何在 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();

从代码隐藏创建 aspx 文本框

可以从创建文本框控件开始。它必须以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()仅循环访问直接子级。如果要搜索嵌套服务器控件的整个树,可能需要实现自己的递归FindControl()函数。[so] 上有一百零一个递归FindControl()函数的例子,所以我把它留给你。

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

我过去使用过的一个解决方案是DynamicControlsPlaceholder,你可以在这里查看。

看看这个,它为您提供了在运行时添加控件的完整示例http://www.codeproject.com/Articles/8114/Dynamically-Created-Controls-in-ASP-NET

http://geekswithblogs.net/dotNETvinz/archive/2009/03/17/dynamically-adding-textbox-control-to-aspnet-table.aspx

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

TextBox myTextBox=new TextBox();

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