从代码隐藏创建 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();
可以从创建文本框控件开始。它必须以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[] 集合中检索该值。