2010-04-15 125 views
0

我有一个三步向导。在第一步中,我使用中继器创建一系列按钮,个人可以从中选择。当用户选择其中一个按钮时,该按钮的值被保存到会话状态。他们被带到下一个步骤,并显示基于他们之前选择的按钮的类似列表。因此,如果您选择“汉堡包”,您可能会收到“洋葱”,“生菜”,“番茄”的选项,而如果您选择“热狗”,则可能会收到“酸菜”和“番茄酱”。 可以说个人选择汉堡包。这被保存到会话状态,如下所示:会话变量未被更新? ASP.NET

Public Sub Button_ItemCommand(ByVal Sender As Object, ByVal e As RepeaterCommandEventArgs) 
    ' ******** Lets pass on the results of our query in LinqDataSource1_Selecting. 
    Session("food_select") = RTrim(e.CommandName) 
    Wizard1.ActiveStepIndex = 1 
End Sub 

现在,这工作得很好,很花哨。但让我说,我选择汉堡,然后意识到我真的渴望一个热狗。我回到第一个向导步骤并点击热狗按钮 - 但是当向导进入下一步时,我仍然可以看到汉堡包的选项!会话变量尚未更新。为什么? 谢谢!

回答

0

问题在于太早检查会话变量。我需要稍后在页面加载过程中移动它们 - 例如prerender,那么会话变量将被更新。

0

会话变量可能已更新,但下一页仍然是缓存从上次访问时缓存

确保您的向导页未被缓存。

+0

你可能是对的......我将如何去禁用缓存?我试图把它放入Page.Load Response.Cache.SetCacheability(HttpCacheability.NoCache) 但是这没有任何明显的区别。 – davemackey 2010-04-16 04:54:16

+0

@davemackey - 看到这个问题:http://stackoverflow.com/questions/955792/browser-caching-in-asp-net-application – Oded 2010-04-16 06:55:52

+0

嗯......我看了看那篇文章,似乎没有在这种特殊情况下提供帮助 - 它更多地涉及静态对象缓存。 – davemackey 2010-04-16 11:49:44