Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从集合的中间删除动态创建的控件_C#_Asp.net_Webforms - Fatal编程技术网

C# 从集合的中间删除动态创建的控件

C# 从集合的中间删除动态创建的控件,c#,asp.net,webforms,C#,Asp.net,Webforms,也许我是在自找麻烦,但我一直在绞尽脑汁动态创建控件。我正在动态构建一个表单,允许用户输入任意多行数据 我有基于按钮单击创建控件的方法,并且我知道,只要我的控件在每次回发时具有相同的ID,那么ViewState就会使用回发之前的数据填充它们 我的问题是:假设用户添加了5行并填写了它们。委员会决定删除第3行。最简单的方法是只调用parent.Controls.Remove(“ID”)。这是否会更新ViewState,以便我只需将计数器减量1,并将其余控件从0重新编号为3,还是需要跟踪删除的控件并保留

也许我是在自找麻烦,但我一直在绞尽脑汁动态创建控件。我正在动态构建一个表单,允许用户输入任意多行数据

我有基于按钮单击创建控件的方法,并且我知道,只要我的控件在每次回发时具有相同的ID,那么ViewState就会使用回发之前的数据填充它们

我的问题是:假设用户添加了5行并填写了它们。委员会决定删除第3行。最简单的方法是只调用
parent.Controls.Remove(“ID”)
。这是否会更新ViewState,以便我只需将计数器减量1,并将其余控件从0重新编号为3,还是需要跟踪删除的控件并保留编号0、1、3、4


我必须做些什么来清除已删除控件的ViewState记录吗?

在开发ASP.NET Forms应用程序时,只要您在ASP.NET Forms框架的上下文和页面加载与回发之间的对象中操作,您就会安全。尽管如此,有时不添加自定义代码很有挑战性。对于向页面动态添加控件来说,在代码隐藏中处理这一点正是最好的地方。

删除控件时,ViewState应自动更新,因为调用
parent.Controls.remove(“ID”)
时,您直接在控件上使用ASP.NET Forms方法。在自定义控件命名的情况下,您需要自己提供所有id或名称,以便它们在页面中是不同的。因此,我假设您已经自定义了该控件的名称,并且知道为
“ID”
放置什么。

就编码而言,ViewState通常对您是透明的。有时,您可能会发现自己在回发之间手动清除ViewState(
类似于带有密码的表单,每次访问页面时都需要清除值
)。ViewState也可以关闭,因此请考虑 或者你的应用程序不需要ViewState的额外开销。在动态表单上,我会尽最大努力在代码隐藏中实现向自定义数据源添加控件或数据绑定。原因是注册客户端脚本,因此ASP.NET Formsframework了解脚本,从绑定的角度来看,在客户端处理自定义id属性或命名方案可能很难调试或处理。

我个人将一个ASP.NET表单应用程序与AngularJS 1.6集成,虽然它比ASP.NET MVC更困难,需要更多配置,但它仍然是可能的,并为我提供了一种很好的方法,可以用ASP.NET的双手构建动态表单。但是,在代码隐藏中绑定回表单值需要从
Request.form集合
中查找和获取值。如果以这种方式执行,则当表单位于ASP.NET外部时,这些对象将有视图状态。

这是否会更新ViewState,以便我只需将计数器减量1,并将其余控件从0重新编号为3,还是需要跟踪删除的控件并保留编号0、1、3、4



就您在这里提到的策略而言,代码示例将非常有用。我不得不做很多假设来猜测可能会发生什么。我可以告诉你这没关系,但是你仍然可能在你的个人结果中遗漏了一些影响结果的东西。删除行时,它将自动更新ViewState。至于如何使用不同的值来命名控件Id,我个人会跟踪您的编号方案,而不是在数字中留下空白,因此坚持使用0到3,这样可以简化您的代码,您不必跟踪太多代码,否则不会影响渲染逻辑。通过这种方式,控件在回发过程中唯一地绑定回您的代码,您可以轻松地遍历控件集合,而不必担心命名方案。

您可以尝试这样做,而不必询问问题。我正涉入一个全新的领域,提出这个问题是为了更好地理解。感谢您的详细讨论!这是我第一次尝试从头开始编写ASP.Net表单,从我的角度来看,它相当复杂,因此,您对上述要点的讨论非常有帮助!没问题,如果答案符合你的需要,请投上一票。我需要经验点,因为我的帐户是新的:)。或者让我知道我可以进一步回答什么。@cptully,如果您对ASP.NET表单不熟悉,并且对它或使用ASP.NET表单的现有应用程序没有特定的需求,我会把您的时间花在学习ASP.NET MVC上。与表单相比,将数据绑定到对象模型,并且不必担心所有的ViewState是非常有意义的。此外,业界正在采用ASP.NET MVC,用于更新的应用程序。现在的表单更为传统。我已经使用Spring学习了Java中的MVC,所以我对MVC很熟悉,但我确实需要ASP.Net表单。我已经接管了一个旧的基于表单的网站的维护工作。不过谢谢你的建议。赛义德:就你在这里提到的策略而言,一个代码示例将非常有用。我同意!如果我遇到问题,我会发布一个新的问题,其中包含代码的具体细节以及它所导致的问题。