动态生成表单如何实际保存输入的数据

时间:2010-10-28 11:29:22

标签: c# asp.net forms dynamic postback

我有一个动态生成的表单。 计划是生成它,用户输入数据,然后保存所有那些批次。 虽然稍微有点变化,如果表单具有与之关联的先前数据,然后它将加载所有预先填充的数据。 - 然后用户可以更改之前的任何选择。

这就是真的,我知道如果我调用generateform而不管回发,viewstate应该接管并记住设置是什么...但是如上所述的generateform方法填充表单如果表单先前已保存。哪个会赢得,田野种群的观点状态或生成方法..?

感谢

NAT

1 个答案:

答案 0 :(得分:2)

如果您动态生成发布数据或导致回发的任何表单控件,则需要在回发时再次重新创建它们,以便在回发后将它们绑定到其数据或事件。从概念上讲,这是有道理的。如果在回发后你的表单中没有控件,你怎么看它的内容?

有几种方法可以解决这个问题。

1)无论如何调用GenerateForm()。既然你说它预填充了一些数据,你就需要改变它,这样就可以不用那样调用它。 ASP.NET将使用回发时自动发布的数据填充控件,这就是您想要的。

2)在ViewState变量中保留所有动态生成的控件的列表,以便在回发时重新生成它们。对于涉及动态创建的控件的大多数情况(例如,您可能事先不知道确切地生成了哪些控件),这是最佳解决方案。通常,您希望能够在回发后访问数据,但也许您真的不想重新创建整个表单,因为您不再使用它。

只要在Page_Load()之前或之前重新创建相同类型和ID的控件,它就会绑定到发布的数据。它不需要在您的表单上完全相同的位置。并且它也不需要使用或显示 - 您可以在呈现表单之前销毁它,例如在Page_PreRender()

3)如果您对此不感兴趣,您可以随时使用Request.Form直接查看发布的数据,但这也很棘手,因为这些名称可能与您的表单控件ID不完全匹配。 ASP.NET生成依赖于容器的唯一客户端ID,这是您在Request.Form中可以找到的。如果不重新生成控件,则可能无法轻松确定要查找的ID。一般来说,你不应该这样做,但它是一种查看发布数据的方法,有时你需要它。