4

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

4 回答 4

5

您可以从创建 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);

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

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

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

于 2012-06-13T13:48:36.927 回答
1

检查一下,它为您提供了在运行时添加控件的完整示例 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

于 2012-06-13T13:47:37.187 回答
1

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

我过去使用的一种解决方案是 DynamicControlsPlaceholder,您可以在此处查看

于 2012-06-13T13:48:26.927 回答
0

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

TextBox myTextBox=new TextBox();

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

于 2012-06-13T13:48:20.093 回答