1

我将文本框(不是固定数量的文本框)动态添加到 ASP.NET 页面上的表单中,我如何从这些文本框中读回数据?

4

8 回答 8

3

假设您想要访问回发上的控件,您可能会重新创建动态控件,就像它们在初始加载时创建的一样,然后使用页面的 FindControls 方法来查找控件。使用 Textbox1、Textbox2 等 ID 创建文本框可能会有所帮助。

于 2008-10-23T22:18:48.307 回答
1

查看 Request.Params 并从那里提取它们。当然,你必须给他们 id 才能区分他们。

于 2008-10-23T22:13:38.550 回答
1

当您添加它们时,您应该为它们提供名称/ID,并且您可以使用它们来引用它们。

如果没有,请在 javascript 中遍历您的 DOM 以在您制作的表单中找到它们 - 它们的顺序与您插入它们的顺序相同。

最后,它们都可以作为您页面的 post/get 输入使用,因此只要您为它们分配不同的名称,您就应该能够查看它们。

-亚当

于 2008-10-23T22:14:18.877 回答
1

在我使用过的所有 ASP.NET 应用程序中,.NET 在为服务器控件生成 Id 时喜欢使用以下算法:

ctl00$cphBody$[ControlID]

从动态生成的文本框访问数据时,请尝试使用此算法。

于 2008-10-23T22:18:17.183 回答
0

动态创建文本框时(可能使用 JavaScript,但 ASP.NET 控件也是如此)以特定模式为它们命名。你以后能认出的那个。

在服务器端,在 Page_Init 之后发生的任何事件处理程序中,您都可以遍历Request.Form集合。

不要试图使用 Request.Param,因为它可用于在您的应用程序上应用跨站点请求伪造(攻击者可能会引诱用户发出 GET 请求,您的应用程序会像解释 POST 请求一样解释该请求,这通常不是一件好事)。

如果要添加动态 ASP.NET 控件(例如在 Page_Render 中),您还可以重构控件并使用它们的属性。

于 2008-10-23T22:23:42.773 回答
0

您可以使用 FindControl 并在回发时传递文本框 ID 以获取文本框的实例。Text 属性包含数据,假设我们处于页面加载阶段或周期的后期。添加动态控件时,重写 CreateChildControls 方法并在循环的此阶段将动态控件添加到控件层次结构中。

于 2008-10-23T22:30:51.090 回答
0

请记住,在 ASP.Net 中,每个回发都是您的类的一个新实例。如果您在之前的回发期间或在第一个视图中创建了这些控件,那么它们将与之前实例的其余部分一起被垃圾收集。因此,要在这个新实例中使用控件,您需要再次创建它们。如果您需要为这些控件加载状态信息(包括用户输入的任何值),您还需要在加载视图状态之前创建,这意味着您在 Init 事件而不是加载事件期间执行此操作。

于 2008-10-23T22:37:26.427 回答
-2

要创建动态控件,我通常会使用 ASP.NET PlaceHolder 控件并将动态控件添加到此容器中。

我会给每个动态控件一个 ID。

随后,您可以在 PlaceHolder 上使用 FindControl 来访问动态控件。

我说“动态控件”是指您在运行时添加的控件

于 2008-10-23T22:29:49.423 回答