【发布时间】:2013-02-06 05:10:34
【问题描述】:
大约 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 进行了回发和来自control1 仅在 control1 回发时触发。存储从control1 的自定义事件传递到control2 的值的最佳方法是什么,或者让control1 在control2 回发时重新传递值,这样我就可以在control2 中重新创建动态控件?
注意:我尝试使用会话,但在第一次搜索后无法从 control1 重新分配值。我相信它们不起作用的原因是我设置 control1 的方式以及在 control2 中创建动态控件的方式跳过了获取会话值。
我提前感谢你们所有人的(希望)有帮助的回复。
更新
事实证明,我在运行时在默认页面上加载用户控件的方式是为什么在“control2”回发时没有重新创建“control2”中的动态控件的原因。我的默认页面在“page_load”而不是“page_init”中加载了用户控件(必须忘记像我所有其他页面一样将用户控件的加载移动到“page_init”)。进行了切换,动态控件在回发时重新创建。
将代码从“page_load”移动到“page_init”后,我遇到的唯一问题是,即使我检查了“复选框”控件,在回发时也会取消选中它们。我能够通过一些会话变量来解决这个问题。
【问题讨论】:
标签: c# dynamic user-controls event-handling logic