3

大约 5 个月前,我的任务是为我现在的雇主创建一个新的 Intranet 网站,因为旧网站是一场噩梦。该站点使用.NET多种语言(classic aspVBC#)和多种语言.NET frameworks(1.0、2.0、3.5,少数地方使用 4.0)。只需一个小时即可实施和测试的简单更改将需要数天才能实施。

新的 Intranet 站点内容通过用户控件进行控制,这些控件在加载时根据您所在的页面和您拥有的访问级别动态加载。每个用户控件都有一个特定的任务,并且不会影响页面上的任何其他用户控件。

大约 3 周前,我的数据库人员(上一份工作是一名应用程序开发人员)向中层管理人员提出了这个想法,即用户控件可以相互通信并影响每个用户控件中可用的选择(这一切都在我不知情的情况下)。

起初,我听了之后觉得不可能。然后,我读到的关于让用户控件相互通信的所有内容都表明,用户控件必须相互了解,这是不可能的,因为所有用户控件都是在运行时根据您拥有的访问级别加载的。上周我找到了一个解决方案,我可以让一个用户控件触发一个自定义事件处理程序,并让我的其他用户控件监听那个特定的自定义事件处理程序。

现在,今天,有人问我是否可以在网站的联系人管理部分添加过滤器,该部分列出了我们所有的客户,类似于 Ebay 在左侧有过滤器,可以让您更深入地了解返回的结果。例如,您搜索“平板电视”。Ebay 将列出与您搜索匹配的所有结果,您可以在左侧选择尺寸范围或品牌以缩小结果范围。

在我设置的页面上,我加载了 3 个用户控件来处理标准和结果。Control1具有所有基本搜索条件(例如行业、地区状态等),control2具有用于从control1. Control3根据 control1 中的条件显示客户端(因此 control1 触发一个事件control2control3听到并且它们都根据 control1 显示结果)。现在我从中选择条件control2并触发control3可以听到并显示结果的事件。

所有这些都有效,我遇到的问题是控件control2是动态构建的,当control1触发事件时->然后control2回发以触发事件control3以听到我丢失了所有动态控件,control2因为控件不能中重新创建,Page_Init因为从 control1 中的自定义事件传入的值不再存在,因为control2回发和事件 fromcontrol1仅在 control1 回发时触发。存储传递给control2fromcontrol1的自定义事件control1的值或在回发时重新传递值control2以便我可以重新创建动态控件的最佳方法是control2什么?

注意:我尝试使用会话,但在第一次搜索后无法从 control1 重新分配值。我相信它们不起作用的原因是由于我设置 control1 的方式以及在其中创建动态控件control2正在跳过获取会话值。

我提前感谢你们所有人(希望)有帮助的回复。

更新
原来我在运行时在默认页面上加载用户控件的方式是为什么在“control2”回发时没有重新创建“control2”中的动态控件的原因。我的默认页面在“page_load”而不是“page_init”中加载了用户控件(必须忘记将用户控件的加载移动到“page_init”,就像我的所有其他页面一样)。进行了切换,动态控件在回发时重新创建。

将代码从“page_load”移动到“page_init”后,我遇到的唯一问题是,即使我检查了“复选框”控件,回发时也会取消选中它们。我能够通过一些会话变量来解决这个问题。

4

1 回答 1

0

这是一个常见的问题。

只有在您的page_init事件中动态创建的控件才能在回发后继续存在。

在此期间page_init,动态创建的控件成为其中的一部分DOM,从而拥有sessionstates。如果您可以重构代码以在 期间触发动态控件创建page_init,那么您的控件应该可以继续存在。

更新:

我从您的评论和帖子中意识到您不愿意使用 Sessions。问题是会话是保存控件的唯一方法。

  • 我处理这种情况的一种方法是创建一个带有控件列表的类对象。当我回到页面时,如果对象存在,我将其用作默认值。
  • 第二种方法是将搜索条件保存在 Session 中,并将条件提供给我的动态控件创建方法。
于 2013-02-06T05:20:27.193 回答