我有一个页面,用户在想要创建新文档或编辑现有文档时会显示该页面。页面上有两个UserControl。一个简单的DatePicker和一个更复杂的网格。在填写或编辑数据之后,他可以按下继续,这将他带到审阅页面,在那里他可以决定真正创建或更新文档或返回并更改某些内容。返回是在javascript中使用history.back()
完成的现在,当用户处于“新”模式并决定从评论页面返回时,网格部分地丢失了其视图状态,并且DatePicker完全失去了它。
另一方面,当用户处于“编辑”模式并从评论页面返回时,两个控件都会保持其视图状态。
我知道浏览器只显示“新建/编辑”页面的缓存版本。但是为什么控制状态的差异以及我可以做什么以使它在两种情况下都有效呢?
答案 0 :(得分:2)
Viewstate本质上是一个隐藏字段,其中填充了已发布回服务器的控件值。
如果用户在表单的控件中输入或选择某些值,则执行回发,然后按下浏览器的后退按钮或执行javascript history.back(),您正在查看回发发生前的页面。因此,用户在回发之前做出的选择将不会出现在页面上。
“新”和“编辑”之间的区别在于,在“编辑”中,您正在从数据库中检索信息以填充控件。
您应该考虑使用 Wizard control ,而不是使用javascript history.back()。向导控件专为此目的而设计。如果用户以多个步骤输入信息,请转到审阅页面,然后需要返回步骤或一直返回到第一步,所有内容都保存在Viewstate中。