Asp.net 覆盖用户控件上的数据绑定,注意事项?

Asp.net 覆盖用户控件上的数据绑定,注意事项?,asp.net,data-binding,user-controls,Asp.net,Data Binding,User Controls,我在具有多个状态/模式的用户控件上有一个自定义属性。如果在父页面中设置了此属性:我希望我的控件自动更新。在页面加载中使用该属性不起作用,因为它未启动 我可以想象三种方法来做到这一点: 在属性上,我可以添加一个代码块,该代码块将调用this.DataBind。 我可以通过重写虚拟方法DataBind来添加代码。 我可以创建一个公共专有更新方法。 我想了解一般最佳实践是什么。更重要的是,我选择重写虚拟方法DataBind。我的伪代码如下所示: public override void Dat

我在具有多个状态/模式的用户控件上有一个自定义属性。如果在父页面中设置了此属性:我希望我的控件自动更新。在页面加载中使用该属性不起作用,因为它未启动

我可以想象三种方法来做到这一点:

在属性上,我可以添加一个代码块,该代码块将调用this.DataBind。 我可以通过重写虚拟方法DataBind来添加代码。 我可以创建一个公共专有更新方法。 我想了解一般最佳实践是什么。更重要的是,我选择重写虚拟方法DataBind。我的伪代码如下所示:

    public override void DataBind()
{
      if (SpecialMode)
       {
        .. load from database

       }
      base.DataBind()
    }
我对base.DataBind的订购感兴趣。我已经看到它通常放在第一位,但是在我从数据库加载数据之后:我将需要databind来获得要显示的数据

对这些考虑因素的任何投入都将不胜感激

要明确的是:


此控件是一个轮询小部件。它通常会从Page_load事件中搜索并加载要显示的轮询。但是,它还有一个报告模式,允许嵌入控件的页面更改要显示的轮询Id。此属性将不会在页面加载中启动。好的,部分原因是我有一个对象的属性,我还有一个ViewState的重复属性,但只有Id。

您的控件不应该以任何方式依赖于它嵌入的页面。相反,请在控件上设置AutoUpdate属性,并让页面对其进行设置。页面还应该设置属性,告诉控件在设置AutoUpdate属性时如何更新。

您可以让用户控件在其PreRender事件中处理自动数据绑定。更改Id属性或触发自动数据绑定的任何属性时,可以在控件内设置一个标志,稍后在PreRender中选中该标志以指示需要加载数据

或者,不必设置标志,您可以清除已从ViewState加载的任何数据,并在PreRender中实现逻辑,说明是否没有数据,然后加载它


这可以避免在一个请求中多次加载数据,因为在这种情况下,恰好有代码多次设置Id属性。

@Saunders这就是我正在做的。我会补充说明。@Curtis:首先,使用用户名的开头,比如@John。其次,您的控件仍不应自行加载数据。看看DataGrid控件是如何做到这一点的。另外,如果没有绑定到数据,则不要使用DataBind方法。只需重写OnPreRender,或者如果控件的输出基于此属性而不同,则可以重写Render。如果数据因属性不同而不同,那么页面应该说明要使用哪些数据,而不是控件。@drwilly谢谢,这很有意义。我会等着看是否有更多的建议。其中的一些复杂性来自这样一个事实:我使用ViewState存储状态数据,但仅使用Id,但为了方便起见,我还在属性中存储一个对象,因此当Id更改时,其他属性应该更改。但是第一次,我实际上是从完整对象加载Id。因此,除非需要,否则我不想加载完整对象。我看现在有点乱了。