Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在PreInit()与Init()中设置控件属性_Asp.net - Fatal编程技术网

Asp.net 在PreInit()与Init()中设置控件属性

Asp.net 在PreInit()与Init()中设置控件属性,asp.net,Asp.net,根据MSDN,我们应该使用PreInit()事件来创建或重新创建动态控件 和Init()事件应用于初始化控件属性 我的问题是,如果我们在PreInit()而不是Init()中初始化控件属性,是否会出现一些问题?如果没有问题,那么我们应该出于什么目的使用OnInit()事件 以下是MSDN页面生命周期链接,其中说明: 您的问题1: 在PreInit()事件中,控件仍未完全初始化,因此不建议使用此事件设置控件属性 问题2:我们应该出于什么目的使用OnInit()事件 如果问题1很清楚,那么您同意在O

根据MSDN,我们应该使用
PreInit()
事件来创建或重新创建动态控件

Init()
事件应用于初始化控件属性

我的问题是,如果我们在
PreInit()
而不是
Init()
中初始化控件属性,是否会出现一些问题?如果没有问题,那么我们应该出于什么目的使用
OnInit()
事件

以下是MSDN页面生命周期链接,其中说明:

您的问题1:

PreInit()
事件中,控件仍未完全初始化,因此不建议使用此事件设置控件属性

问题2:
我们应该出于什么目的使用OnInit()事件

如果问题1很清楚,那么您同意在
OnInit()
中初始化控件属性,正如MSDN所说的那样

另外,关于
Init
事件和控件属性,还需要了解一些重要的内容

Init
中,您无法访问上次viewstate之后的任何控件属性。假设您在textbox控件中输入一些文本,然后单击按钮控件进行回发,现在您希望查看最近输入的值。在这种情况下,您将能够看到您在
InitComplete
之后输入的文本框值,即在
PreLoad
中,因为视图状态从
PreLoad
事件开始完全加载


现在可以说,如果在
Init
事件中设置任何控件属性,当引发下一个事件
InitComplete
时,它可能会被覆盖&视图状态更改的跟踪被打开

一个原因是,如果自定义控件在OnInit阶段生成其子控件,并且需要一些数据(属性)来生成这些控件,您无法从页面的OnInit阶段分配该属性,因为OnInit将按页面上最低叶控件的顺序调用。


因此,唯一的地方(在代码后面)您可以将属性分配给依赖于某些提供的数据在其OnInit中构建子控件的控件。OnInit位于页面的PreInit中。

您应该显示链接,其中提到您应该使用
PreInit
而不是
Init
来重新创建动态控件
Init
就足够了,在大多数情况下,甚至
Page_Load
也足够了,它有一个advatange,您可以评估
ViewState
,因为它已经被加载了(例如,如果您使用
int
变量来存储已经创建了多少个控件)。您可以忽略这一点,我从未对动态控件使用过
PreInit
。该事件有几个缺点,因为您无法计算viewstate,甚至无法设置属性。“如果请求是回发,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,其值可能会在下一个事件中被覆盖。”(从链接中)好的,但Init()也存在此缺点。这是否意味着我也不应该使用Init()。
will there be some issue if we initialize the control properties in PreInit()
instead of Init()