【问题标题】:Delete dynamically created controls from the middle of a set从集合中间删除动态创建的控件
【发布时间】:2017-10-27 14:45:20
【问题描述】:

也许我是在借用麻烦,但我已经把注意力集中在动态创建控件上。我正在动态构建一个表单,允许用户输入任意数量的数据行。

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

我的问题是:假设用户添加了 5 行并填写了它们。决定删除第 3 行。最简单的方法是调用parent.Controls.Remove("ID")。这是否会更新 ViewState,以便我可以将计数器减 1 并将剩余控件从 0 重新编号为 3,或者我是否需要跟踪删除了哪个控件并保持编号为 0、1、3、4?

我是否必须做一些事情来清除 ViewState 的已删除控件记录?

【问题讨论】:

  • 不问,你可以试着去做
  • 还没有问题。我正在涉足全新的领域,并提出这个问题以获得更好的理解。

标签: c# asp.net webforms


【解决方案1】:

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

当您删除控件时,ViewState 应该会自动更新,因为您在调用 @ 时直接在控件上使用 ASP.NET Forms 方法987654321@。如果您自定义命名控件,您将需要自己提供所有 id 或名称,以便它们在页面中是不同的。所以在这里我假设您已经自定义命名控件,并且知道为"ID" 真正放置什么。

ViewState 就编码而言,通常对您来说是透明的。有时您可能会发现自己在回发之间手动清除 ViewState (like for a form with a password, when every visit to the page you need to clear the value)。 ViewState 也可以转off,所以想想是否 或者您的应用是否需要 ViewState 的额外开销。在动态表单上,我会尽我所能在后面的代码中实现向自定义数据源添加控件或数据绑定。原因是注册客户端脚本,所以 ASP.NET Forms 框架知道脚本,处理自定义 id 属性或客户端命名方案可能很难从绑定的观点。

我亲自将一个 ASP.NET Forms 应用程序与 AngularJS 1.6 集成,虽然它比使用 ASP.NET MVC 更困难,并且需要更多配置。 strong>,它仍然是可能的,并为我提供了一种从 ASP.NET 手中构建动态表单的好方法。但是,在后面的代码中绑定回表单值需要从Request.Form Collection 中查找和获取值。如果以这种方式完成,当您的表单在 ASP.NET 外部时,这些对象将有 no ViewState

这是否会更新 ViewState,以便我可以将计数器减 1 并将剩余控件从 0 重新编号为 3,或者我是否需要跟踪删除了哪个控件并保持编号为 0、1、3、4 ?


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

【讨论】:

  • 感谢您的详细讨论!这是我第一次尝试从头开始编写 ASP.Net 表单,从我的角度来看,它相当复杂,所以您对上述要点的讨论非常有帮助!
  • 没问题,如果它适合您的需要,请为答案投票。我需要经验值,因为我的帐户是新帐户:)。或者让我知道我可以进一步回答。
  • @cptully,如果您对 ASP.NET 表单并且对它或使用 ASP.NET Forms,我会花时间学习 ASP.NET MVC。数据绑定到对象 Models,与 Forms 相比,不必担心所有的 ViewState 非常有意义。业界也正在采用 ASP.NET MVC,用于更新的应用程序。 Forms 现在比较传统了。
  • 我使用 Spring 研究过 Java 中的 MVC,因此我对 MVC 很熟悉,但我确实对 ASP.Net 表单有特殊需求。我已经接管了一个基于表单的旧网站的维护工作。不过感谢您的建议。
  • 说:就您在这里提到的策略而言,代码示例将是最有帮助的。 我同意!如果我遇到问题,我将发布一个新问题,其中包含代码的具体细节及其导致的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多