我有一个复合控件,它有几个私有字段引用缓存中的值,这些私有字段在构造函数方法中被调用。由于字符串键用于标识缓存中的值,因此我必须有一种方法来存储该字符串键,使其在实例化控件时可用,并且我必须能够引用它没有改变的回发。
此外,此键在第一次加载控件时生成,但在第一次之后不应再次更改。
我该如何做到这一点?
我已经尝试将其保存到viewstate,但这不起作用,因为在实例化控件时viewstate尚不可用。
我尝试使用私有字段,然后在构造函数中检查Page.IsPostback,如果它不是回发,我为私有字段分配一个值,但在随后的回发中它会丢失它的值,我可以' t再次在Page.IsPostBack中重新分配它,因为它是一个自动生成的GUID。
这必须是人们以前必须做的事情......
答案 0 :(得分:0)
答案 1 :(得分:0)
在控制构造过程中根本没有很多状态信息,所以这可能很难。是否有某些原因您无法将访问Cache'ed信息的代码移动到控件的Init事件中?
我假设你不能使用Session,因为存储的信息与特定的请求/回发有关。如果它不是特定于该请求,则可能使用Session - 但我认为您可能会遇到其他问题,试图在生命的早期处理控制状态。
看到你对另一个答案的评论后;您应该能够将检查缓存数据源的代码移动到控件的Init或甚至Load事件中,以便状态可用。
另外,顺便说一下;你确定你真的需要缓存这些数据吗?这可能会占用大量的服务器内存。
答案 2 :(得分:0)
虽然这不是最好的解决方案(重新排列逻辑以适应生命周期模型),您是否尝试过直接访问请求?我曾经真的想在生命周期的早期从DropDownList中获取所选值,所以我可以调整建筑物中的一些元素,我这样做了:
myDropDownList.SelectedValue = Page.Request.Form[myDropDownList.UniqueID];
因此,我不是等待视图状态加载服务器端代理的值,而是从客户端控制值中自己获取,而不是在帖子中传递的。如果我重新设计那个页面,我可能会采取不同的做法,但现在似乎已经成功了,它解决了我遇到的问题。