ASP.NET中的IsPostBack失效了吗?

3
我们创建了一个ASP.NET 3.5应用程序,为物流公司提供服务,允许他们的客户输入交付/作业并将其放入系统中。
系统的核心页面是添加作业屏幕,正如您所能想象的那样-当用户建立自己的作业时,我们在Session中存储一些信息。然后当他们提交作业或在Page_Load事件中请求不是回发时,会清除会话以准备下一个作业。
我们遇到了一些小部分客户的问题,其中用户的会话似乎在提交之前被清除了-用户向我们保证他们没有尝试使用多个会话(即同一页的2个窗口)。我们放置了一些错误捕获,记录每当在该页面上清除会话时,它似乎在他们单击提交几秒钟之前触发了。请注意,我们在此页面上有很多autopostback控件。
是否有任何ASP.NET怪癖,或者浏览器怪癖,会导致IsPostback属性不正确地为false?这是一个非常零散的问题,我们在复制此问题方面毫无成功!

3
为什么首先要使用会话(session)来做那件事情? - CodesInChaos
3
你实际的问题听起来像是竞争条件,即同一页中的两个请求相互重叠。也许用户连续点击了两次提交按钮。 - CodesInChaos
1
也许会话已过期。不过我和@CodesInChaos一样...似乎不是使用会话的好情况。 - MikeSmithDev
为什么不使用ViewState来存储有关该页面的信息呢? - Azhar Khorasany
这是一个我们现在正在维护的遗留应用程序,所以我知道为此使用会话相当愚蠢! - Chris
1个回答

0

根据许多评论的建议,会话是错误的解决方案。它可能会被许多事情重置(例如应用程序池回收)。

您不应该强制用户不使用不同的浏览器或选项卡,因此正确的选择是将数据移动到ViewState/Control状态。

如果由于某种奇怪的原因您仍然必须在会话中保留数据,请考虑切换到持久会话存储(即使用SQL Server)。


哎呀呀!我的解决方案被盗了 :( 我在 OP 评论区中注释了 ViewState 的使用。 - Azhar Khorasany

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接