大约5个月前,我被分配任务为我的雇主创建一个新的内部网站,因为旧网站难以使用。该网站使用多种.NET语言(经典asp、VB和C#)和多个.NET框架(1.0、2.0、3.5,少数地方使用4.0)。应该只需要一个小时来实现和测试的简单更改需要几天的时间才能实现。
新的内部网站内容通过用户控件进行控制,这些控件在加载时根据您所在的页面和访问级别动态加载。每个用户控件都有一个特定的任务,不会影响页面上的任何其他用户控件。
大约3周前,我的数据库专家(他在上一份工作中是应用程序开发人员)向中层管理层提出了这个想法,即用户控件可以相互通信并影响每个用户控件中可用的选择(所有这些都没有我的知识)。
起初,当我听到这个想法时,我认为这是不可能的。然后,我读到的关于用户控件如何相互通信的所有内容都表明,用户控件必须知道彼此的存在,而这是不可能的,因为所有用户控件都是根据您的访问级别在运行时加载的。上周我找到了一个解决方案,可以使一个用户控件触发自定义事件处理程序,并使我的其他用户控件监听该特定的自定义事件处理程序。
现在,今天,有人问我是否可以为网站上列出所有客户的联系管理部分添加过滤器,类似于Ebay在左侧具有的过滤器,允许您进一步钻取返回的结果。例如,您搜索“平板电视”。Ebay将列出所有符合您搜索的结果,并且在左侧,您可以选择大小范围或品牌以缩小结果。
在我设置的页面上,我加载了3个用户控件来处理标准和结果。Control1具有所有基本的搜索标准(例如行业、地区状态等),Control2具有从Control1中缩小结果的过滤器。Control3根据Control1中的标准显示客户端(因此,Control1触发Control2和Control3都会显示基于Control1的结果)。现在,我从Control2选择标准并触发Control3可以听到并显示结果的事件。
所有这些都起作用,我遇到的问题是,在
注意:我尝试使用会话,但在第一次搜索后重新分配来自control1的值时遇到了麻烦。我认为它们无法正常工作的原因是由于我设置control1的方式以及在
提前感谢大家的(希望)有益回复。
更新 事实证明,我在默认页面上运行时加载用户控件的方式是导致“control2”中的动态控件在“control2”回传时未被重新创建的原因。我的默认页面在“page_load”中加载用户控件,而不是在“page_init”中加载(可能忘记将加载用户控件移到“page_init”中,就像我所有其他页面一样)。进行了更改,动态控件在回传时重新创建。
我从“page_load”移动代码到“page_init”后唯一遇到的问题是,“checkbox”控件在回传时将取消选中,即使我选中它们也是如此。我能够通过几个会话变量克服这个问题。
新的内部网站内容通过用户控件进行控制,这些控件在加载时根据您所在的页面和访问级别动态加载。每个用户控件都有一个特定的任务,不会影响页面上的任何其他用户控件。
大约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”后唯一遇到的问题是,“checkbox”控件在回传时将取消选中,即使我选中它们也是如此。我能够通过几个会话变量克服这个问题。