也许有人可以帮助我。我创建了一个简单的Web用户控件,一个日期和时间选择器,可以放到我的webform上。这一切都很好,我可以设置属性,为ui等使用控制令人满意。
当需要“使用”控件的selected_date_time属性时,我无法让它继续存在。没什么..我已经研究过并且无休止地尝试使用视图,上下文和会话。 Onbiouosly会话工作,但它很脏,我使用这个控件的两个副本(开始和结束时间),所以会话变量真的需要被黑客攻击他的工作。
我错过了什么吗?每当发生某些事情时,控件都会被初始化,并且显然会丢失其状态信息。 ui保持其状态,因为我可以选择日期,将该日期写入标签,并且持续存在。但是当我尝试访问我的控件属性以检索所选的组合日期和时间时(已经在视觉上保持不变),它什么都没有。我调试了,每当我在页面上做任何形式的帖子时它都会被初始化。
有人可以帮我解释一下吗?它现在真的开始成为一个问题。
提前致谢。
示例:(简单组件)
UC _ save_method
ViewState("var_time") = "My veiwstate text"
表格_read_method
dim str as string = ViewState("var_time")
表单在viewstate var。
中看不到任何内容我也尝试过普通的属性和值,这是不行的,这就是为什么我继续为我的属性查看var的原因。现在,我只是试图让viewstate工作,即使没有属性。
似乎我的表格和控件必须有两个单独的视图状态?关于观点,我有点像n00b。
由于
[溶液] 您必须在控件的prerender方法上显式重置您的属性。我的误解是页面和控件共享同一个视图状态。结果是控件和它所在的页面,有自己独立的视图状态。
如此荒谬地,在控件中的属性集函数中,在viewstate中设置您的值,并在预渲染时,获取该viewstate值,并设置属性get variable = - viewstate中的值。
您现在可以从您的页面访问该属性,就好像一切正常并且世界没有结束...... pheww
感谢cnay指导我。
'Usr control xyz
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
my_time = ViewState("var_time")
'my_time is the get variable for property date_time
End Sub
'page use
xyz.date_time
答案 0 :(得分:2)
也许,您应该发布完整的控制代码以获得更好的答案,但一般而言 - 视图状态(或控制状态)是持久控制状态(如属性)的通常正确方法。每个控制实例都获得不同的视图状态包,因此很容易避免碰撞。
现在,遇到问题,典型的可编辑控件首先从视图状态恢复其状态,然后根据需要使用请求数据修改状态。例如,一个简单的文本框控件会将其文本值保持在视图状态。在回发后,文本值将从视图状态恢复,然后被请求中存在的值覆盖(由UniqueID
属性查找)。
现在,对于用户控件,通常可以使用子控件值(或属性)来派生控件值/属性 - 因此这些可能不会使用视图状态。但是,如果添加不由子控件备份的属性/状态,则可能必须在视图状态中备份它们。因此,假设您的用户控件有两个子控件 - 一个用于Date,另一个用于时间,然后可以组合它们的值以获得控件的选定日期时间值。