我从syste.web.ui.webcontrols.button派生一个控件。 然后我称之为buttonv2。 然后我向这个新类“int abc”添加一个任意属性,通过一个get / set访问器访问它,该访问器将它的值存储在viewstate中(如果viewstate值为null,它也返回0,即我试图访问它而不设置它。)
现在,每当我给'abc'一个值,然后在调试模式下观察它时,它会触及访问器的'set'部分,并输入我给它的值(即55),然后直接,它击中了我的代码的某些部分'if(abc> 0){}',它从viewstate获取的值为0!
只有当我使用asp.net'skins'并在skin文件中预设'abc'值时才会发生这种情况。 (即)皮肤文件为:<asp:buttonv2 runat="server" SkinID="bob" abc="55" />
在我的网页中使用<asp:buttonv2 runat="server" SkinID="bob" />
并且我的概率是abc总是等于0?
答案 0 :(得分: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”添加到viewstate会发生什么?