大约 5 个月前,我的任务是为我现在的雇主创建一个新的 Intranet 网站,因为旧网站是一场噩梦。该站点使用.NET
多种语言(classic asp
、VB
和C#
)和多种语言.NET frameworks
(1.0、2.0、3.5,少数地方使用 4.0)。只需一个小时即可实施和测试的简单更改将需要数天才能实施。
新的 Intranet 站点内容通过用户控件进行控制,这些控件在加载时根据您所在的页面和您拥有的访问级别动态加载。每个用户控件都有一个特定的任务,并且不会影响页面上的任何其他用户控件。
大约 3 周前,我的数据库人员(上一份工作是一名应用程序开发人员)向中层管理人员提出了这个想法,即用户控件可以相互通信并影响每个用户控件中可用的选择(这一切都在我不知情的情况下)。
起初,我听了之后觉得不可能。然后,我读到的关于让用户控件相互通信的所有内容都表明,用户控件必须相互了解,这是不可能的,因为所有用户控件都是在运行时根据您拥有的访问级别加载的。上周我找到了一个解决方案,我可以让一个用户控件触发一个自定义事件处理程序,并让我的其他用户控件监听那个特定的自定义事件处理程序。
现在,今天,有人问我是否可以在网站的联系人管理部分添加过滤器,该部分列出了我们所有的客户,类似于 Ebay 在左侧有过滤器,可以让您更深入地了解返回的结果。例如,您搜索“平板电视”。Ebay 将列出与您搜索匹配的所有结果,您可以在左侧选择尺寸范围或品牌以缩小结果范围。
在我设置的页面上,我加载了 3 个用户控件来处理标准和结果。Control1
具有所有基本搜索条件(例如行业、地区状态等),control2
具有用于从control1
. Control3
根据 control1 中的条件显示客户端(因此 control1 触发一个事件control2
并control3
听到并且它们都根据 control1 显示结果)。现在我从中选择条件control2
并触发control3
可以听到并显示结果的事件。
所有这些都有效,我遇到的问题是控件control2
是动态构建的,当control1
触发事件时->然后control2
回发以触发事件control3
以听到我丢失了所有动态控件,control2
因为控件不能中重新创建,Page_Init
因为从 control1 中的自定义事件传入的值不再存在,因为control2
回发和事件 fromcontrol1
仅在 control1 回发时触发。存储传递给control2
fromcontrol1
的自定义事件control1
的值或在回发时重新传递值control2
以便我可以重新创建动态控件的最佳方法是control2
什么?
注意:我尝试使用会话,但在第一次搜索后无法从 control1 重新分配值。我相信它们不起作用的原因是由于我设置 control1 的方式以及在其中创建动态控件control2
正在跳过获取会话值。
我提前感谢你们所有人(希望)有帮助的回复。
更新
原来我在运行时在默认页面上加载用户控件的方式是为什么在“control2”回发时没有重新创建“control2”中的动态控件的原因。我的默认页面在“page_load”而不是“page_init”中加载了用户控件(必须忘记将用户控件的加载移动到“page_init”,就像我的所有其他页面一样)。进行了切换,动态控件在回发时重新创建。
将代码从“page_load”移动到“page_init”后,我遇到的唯一问题是,即使我检查了“复选框”控件,回发时也会取消选中它们。我能够通过一些会话变量来解决这个问题。