我在用户控件上有一个自定义属性,它有多个状态/模式。如果在父页面中设置了此属性:我希望我的控件自动更新。在页面加载中使用该属性不起作用,因为它未启动。
我可以想象有3种方法可以做到这一点:
我希望对一般的最佳做法有任何意见。更重要的是,我选择覆盖虚拟方法DataBind。我的伪代码是这样的:
public override void DataBind()
{
if (SpecialMode)
{
.. load from database
}
base.DataBind()
}
我对base.DataBind()的排序感兴趣。我已经看到它通常放在第一位,但是在我从数据库加载数据之后:我需要数据绑定才能显示数据。
非常感谢对这些考虑因素的任何投入。
要明确:
此控件是一个Poll小部件。它通常会搜索并加载轮询以从Page_Load事件中显示。但是,它还有一个报告模式,允许嵌入控件的页面更改要显示的轮询的ID。此属性不会在Page_Load中启动。好吧,这个混乱的一部分是我有一个对象的属性,我也是ViewState的重复属性,但只有Id。
答案 0 :(得分:0)
您的控件不应以任何方式依赖于嵌入它的页面。相反,在控件上有一个“AutoUpdate
”属性,并让页面设置它。该页面还应设置属性,告知控件在设置AutoUpdate
属性时如何更新。
答案 1 :(得分:0)
您可以让您的用户控件在其PreRender事件中处理自动数据绑定。当Id属性被更改时(或者触发自动数据绑定的任何属性),您可以在控件中设置一个标志,稍后在PreRender中检查该标志以指示需要加载数据。
或者,您可以清除已经从ViewState加载的任何数据,并在PreRender中实现逻辑,说明“如果没有数据,则加载它”,而不是设置标志。
这可以避免在单个请求中多次潜在地加载数据,因为恰好存在多次设置Id属性的代码。