【发布时间】:2015-02-15 04:57:25
【问题描述】:
我有一个 aspx 页面并添加了一个文字控件:
<asp:Literal runat="server" ID="ControlLiteral"></asp:Literal>
然后,在代码隐藏中我使用 for 语句来大规模创建控件,想法是这样的:
ControlLiteral.Text = @"<input id=""txtMaterial1"" type=""text"" value=""escribe un valor"" disabled=""disabled"" onclick=""somefunction(this)"" style=""width:250px;"" />
然后我想在代码隐藏中的提交按钮后获取值,但问题是我找不到它们,我开始认为代码隐藏不知道这些控件,即使我检查了 HTML 源代码和一切都在那里......有什么想法吗?
我尝试了以下方法:
-
在创建控件的字符串中添加了runat="server",当然,它不起作用,它只是在html中添加了文本runat="server"
李> Request.Form["txtMaterial"] 或 Request["txtMaterial"] 什么也没找到
Page.Controls.Find("txtMaterial") 返回 null
当我这样做时,this.from1.Controls.Count 它只检索 11 个控件而不是我在 for 语句中添加的 210 个控件,如果像这样检索它们 this.from1.Controls[2], asp.net引擎创建的那些不相关的html标签
Page.Controls.Count 仅检索 5 个控件
那些控件在一个表里面,不知道它有什么用,所以,你有什么想法吗,自从我上次使用asp.net已经有一段时间了,但记住这是可能的,请让我的了解你的想法,
【问题讨论】:
-
您不能通过设置 Literal 的文本来创建服务器控件。它不会像您将其添加到 .aspx/ascx 文件中那样进行编译。
-
不要添加这样的代码,您应该有一个面板或其他占位符,您可以在其中将新控件添加到占位符的 Controls 集合中。这应该在 Page_Init 中完成,以便为回发正确注册控件。
-
@rossisdead 那些不是服务器控件,它们是 HTML 控件...
标签: c# html asp.net dynamic-controls