0

我从 syste.web.ui.webcontrols.button 派生一个控件。然后我称它为buttonv2。然后,我向这个新类“int abc”添加一个任意属性,通过一个 get/set 访问器访问它,该访问器将它的值存储在 viewstate 中(如果 viewstate 值为 null,它也返回 0,即我试图无需设置即可访问它)。

现在,每当我给'abc'一个值,然后在调试模式下观察它,它会很好地命中访问器的'set'部分,并输入我给它的值(即55),然后紧接着,它会命中一些我的代码“if (abc >0){}”的一部分,它从视图状态中获取值为 0!

这仅在我使用 asp.net 'skins' 并在皮肤文件中预设 'abc' 值时发生。(ie) 皮肤文件内容如下:<asp:buttonv2 runat="server" SkinID="bob" abc="55" />

在我使用的页面中<asp:buttonv2 runat="server" SkinID="bob" />,我的概率是 abc 总是等于 0?!

4

1 回答 1

1

认为皮肤参数是在控件初始化期间分配的,而视图状态只会在 OnInit 完成后存储。

来自 MS:“它仅在对页面请求执行 OnInit 方法后跟踪对这些属性的更改,并将更改保存到页面或控件的视图状态。”

http://msdn.microsoft.com/en-us/library/ms178472.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.statebag.aspx

更多。

如果您只是将值分配给“set”上的局部变量,然后将其从页面 init/load 上的“get”添加到视图状态,会发生什么?

于 2009-04-02T21:11:51.743 回答