如何从 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)
您可以从创建 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] 上有一百万零一个递归函数的例子,所以我会把它留给你。