我正在使用实体框架4.0将数据库对象绑定到ascx控件上的DetailsView。在DetailsView中,我有一些asp:面板,我想显示/隐藏,取决于该人访问时发生的事情。
所以,第一次通过页面我在FormView_OnLoad事件中设置panelA.Visible = false,一切都很好 - 该面板不在HTML中输出。它听取了我在这里的要求。
一旦我点击提交和回发,我将再次检查发生了什么,并在FormView_OnLoad和EntityData_OnUpdating中设置panelA.Visibe = false。但这一次,当页面出现时,panelA正在显示。
我发现我只能在回发后通过在DetailsView_PreRender中设置visible = false或通过将可见性绑定到公共变量来隐藏该面板。
我想也许在life cycle中,DetailsView再次绑定到最后,并抛弃我的可见性设置,即使它们没有绑定。因此,要在回发中显示/隐藏DetailsView中的面板,我是否总是必须在DetailsView_PreRender或之后设置可见性?
我是在正确的轨道上,还是在最后一秒重置我的东西?
为什么我可以在第一次通过页面设置可见性但不回发?
答案 0 :(得分:0)
您应该始终在回发处理后对页面结构进行最终修改 - 这就是PreRender
事件存在的原因。您的方案中的其他可能事件可能是处理DataBound事件,但更好更清晰的方法是PreRender
。