【问题标题】:How to set a value to custom control property before OnInit - ASP.net?如何在 OnInit 之前为自定义控件属性设置值-  ASP.net?
【发布时间】:2011-07-11 01:03:58
【问题描述】:

我有一个拥有属性的自定义控件。在这个自定义控件的 OnInit 方法中,它利用这个属性来完成一些其他的工作。

所以在页面端,我初始化这个自定义控件并在 Page_Init 方法中设置它的属性。但是自定义控件的 Oninit 方法比 Page_Init 方法调用得更早,这意味着我永远无法在 OnInit 方法中获得正确的属性值。那么在页面代码后面设置自定义控件的属性值的正确位置是什么?

谢谢

【问题讨论】:

    标签: asp.net controls properties


    【解决方案1】:

    PreInit 仅针对页面存在,因此如果您需要从页面设置某些内容,则可以使用。 Init 以相反的顺序触发,首先是最低级别的控件,然后冒泡到最后触发的页面。所有其他事件首先从页面触发。

    如果 PreInit 可以工作,请使用它。否则,另一种解决方法是让属性检查值是否为 null 且未提供,如果不是,它可能会触发需要您提供它的 NeedValue 事件。

    HTH。

    【讨论】:

    • 到目前为止,我仍然无法通过使用 preinit 使其工作。请参阅我对怀亚特的评论。对于您提供的第二个选项,我无法使用它,因为我的属性可以为空。如果它为空,则无需执行任何操作。否则使用此属性值过滤结果。还有什么建议吗?谢谢
    • 您可以尝试从自定义控件执行:this.Page.PreInit += CustomControl_PreInit;并以这种方式附加,我认为这是支持的。关于 PreInit 的事情; ASP.NET 的一些服务不可用,所以要小心。我的事件方法作为解决方法肯定会奏效。
    • 对不起,有点混乱。这段代码会将“this.Page.PreInit += CustomControl_PreInit”放在哪里?在自定义控件的 Oninit 方法中?以及在哪里设置属性值?
    • 自定义控件的构造函数,不确定 100% 是否可以工作......“在哪里设置属性值”是什么意思?您可以在事件处理程序中设置它。这就是为什么我问了我的第一个问题。我对谁应该设置值、页面或自定义控件感到困惑......
    • 我的另一种方法,定义一个自定义事件,在该属性尚未设置时触发该事件。
    【解决方案2】:

    假设您使用的是 2.0 或更高版本,则有一个 PreInit 页面级事件适用于这类事情。

    如果您不能直接从那里编写它——像您的控件这样的东西可能不存在——您可以使用 HttpContext.Items 将值存储在控件可以从中获取它的位置。但这变得越来越老套了。

    【讨论】:

    • 对不起,我应该提到我使用来自用户控件的自定义控件。我试图从用户控件的 Page_PreInit 方法中设置属性值。似乎在调试期间永远无法达到。从后面的用户控制代码中使用 Page_PreInit 是否正确?谢谢
    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2013-04-13
    • 2023-03-05
    • 2012-12-31
    相关资源
    最近更新 更多