从代码隐藏创建 aspx 文本框

vml*_*l19 4 c# asp.net

如何从 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>";
Run Code Online (Sandbox Code Playgroud)

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

string tb = Request.Form["strtxtbox"].ToString();
Run Code Online (Sandbox Code Playgroud)

Cᴏʀ*_*ᴏʀʏ 5

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

var textBox = new TextBox();
Run Code Online (Sandbox Code Playgroud)

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

textBox.ID = "uxTxtSomeName";
textBox.MaxLength = 10; // maximum input length
textBox.Columns = 20; // character width of the textbox
etc...
Run Code Online (Sandbox Code Playgroud)

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

parentControl.Controls.Add(textBox);
Run Code Online (Sandbox Code Playgroud)

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

var input = (parentControl.FindControl("uxTxtSomeName") as TextBox).Text;
Run Code Online (Sandbox Code Playgroud)

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

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