我动态地将文本框(不是固定数量的文本框)添加到ASP.NET页面上的表单,如何从这些文本框中读回数据?
答案 0 :(得分:3)
假设您想要访问回发上的控件,您可能会重新创建动态控件,就像在初始加载时一样,然后使用页面的FindControls方法来查找控件。创建具有Textbox1,Textbox2等ID的文本框可能会有所帮助。
答案 1 :(得分:1)
查看Request.Params并从那里提取它们。当然,你必须给它们以便能够区分它们。
答案 2 :(得分:1)
当你添加它们时,你应该给它们名字/ ids,你可以用它们来引用它们。
如果没有,请在javascript中使用你的DOM来在你自己的表单中找到它们 - 它们将按照你插入它们的顺序排列。
最后,它们全部作为帖子/获取输入提供给您的页面,因此只要您为其分配了不同的名称,您就应该能够查看它们。
- 亚当
答案 3 :(得分:1)
在我使用的所有ASP.NET应用程序中,.NET在生成服务器控件的Id时喜欢使用以下算法:
ctl00$cphBody$[ControlID]
从动态生成的文本框访问数据时,请尝试使用此算法。
答案 4 :(得分:0)
动态创建文本框时(可能使用JavaScript,但ASP.NET控件也一样),以特定模式为其命名。您将能够识别的那个。
在服务器端,在Page_Init之后发生的任何事件处理程序中,您可以遍历Request.Form集合。
不要试图使用Request.Param,因为它可以用于在您的应用程序上应用跨站点请求伪造(攻击者可以诱使用户发出GET请求,您的应用程序将解释它与解释POST一个,这通常不是一件好事。)
如果要添加动态ASP.NET控件(例如在Page_Render中),您还可以重新构建控件并使用它们的属性。
答案 5 :(得分:0)
您可以使用FindControl并传回文本框ID以在回发时获取文本框的实例。 Text属性包含数据,假设我们处于页面加载阶段或循环中的后期。 添加动态控件时,重写CreateChildControls方法并在循环的此阶段添加动态控件以控制层次结构。
答案 6 :(得分:0)
请记住,在ASP.Net中,每个回发都是您班级的新实例。如果您在上一次回发期间或第一个视图中创建了这些控件,那么它们将与之前实例的其余部分一起进行垃圾回收。因此,要在此新实例中使用控件,您需要再次创建它们。如果您需要为这些控件加载状态信息(包括用户输入的任何值),您还需要在加载视图状态之前创建,这意味着您在Init事件期间执行此操作,而不是加载事件。
答案 7 :(得分:-2)
要创建动态控件,我通常会使用ASP.NET PlaceHolder控件并将动态控件添加到此容器中。
我会给每个动态控件一个ID。
然后,您可以随后在PlaceHolder上使用FindControl来访问动态控件。
我说“动态控件”表示您在运行时添加的控件