2009-01-15 47 views
4

我已经在ASP.net中编写了一个应用程序,该应用程序旨在让用户将记录添加到数据库中。该页面设置为当用户添加记录时,新添加的记录的ID号在session中设置,页面Response.Redirects为“Thank you for submitting”页面,然后重定向回原始页面以允许进一步编辑。用户还可以使用此屏幕上的“后退”按钮返回到原始记录添加页面,以便他们对数据进行编辑。在ASP.NET中如何处理会话和多个选项卡?

但是,我发现在会话中存储ID并不是一个非常好的解决方案,因为用户可能会尝试在不同的选项卡或窗口中创建两个文档。我也尝试在文字控件中设置ID,但这会导致问题,即当用户使用“后退”按钮时,文字控件未设置为ID,并且会添加新记录而不是正在编辑的记录。

有没有这方面的解决方案?

回答

1

愚蠢的问题,用户为什么使用后退按钮,编辑只是在后接受的数据?

如果编辑以前发布的数据是一个常见的场景,为什么不只是重定向到一个页面,当数据被接受,让他们对其进行编辑。然后,如果点击后退按钮,他们将回到原来的“干净”插入/添加新的数据页面。

这会给出以下流程 Add - > [Post] - > Edit - > ..... Add - > [Post] - > Edit - > [Back button] - > Add - > [Post ] - >编辑 - > [发布] - >编辑....

0

控件将其状态保存在ViewState中。如果您选择使用SessionState而不是ViewState来存储信息,则控件会将其状态保存在会话状态中,并且在多个选项卡中它将无法正常工作。

我还没有找到一种方法来绕过此问题,同时仍然使用SessionState。我们的解决方案是使用普通的ViewState。

5

我建议将您的ID存储在QueryString中。添加记录后,重定向到您的“谢谢”页面,然后我猜测包含编辑表单的链接,您将使用查询字符串中的ID生成该编辑表单。遵循该链接时,编辑页面会将ID从查询字符串中拉出以便加载正确的记录进行编辑。

您的添加和编辑表单甚至可以是相同的页面,当在查询字符串中提供了一个ID时,表单知道编辑该记录,否则您的表单会添加一条新记录。

+1

人,你以10秒打我吧.... – 2009-01-15 17:37:06

+0

对此感到遗憾;) – Trent 2009-01-15 17:39:44

1

您是否尝试过在querystring中添加ID?然后,您可以阅读它,并根据需要将其添加到会话中(例如,用户单击后退按钮)。

看起来像许多问题,允许在使用后退按钮时呈现的页面中编辑对象。改为给他们一个编辑按钮是否太多了?

0

我试过将查询字符串存储在查询字符串中(这对编辑来说基本没问题),但问题在于当信息存储在会话中时,他们使用“后退”按钮。如果用户将执行以下操作:

  1. 用户创建一个记录(第一记录),该ID是沿着查询字符串传递,并临时存储在会话中。
  2. 用户创建另一条记录(第2条记录),该ID在查询字符串中传递,临时存储在会话中。
  3. 用户使用第一条记录上的后退按钮转到没有查询字符串的页面。

这可能是一个牵强的场景,但它可能会发生。我唯一的解决方案是通过在JavaScript中使用window.history.forward()来阻止Back按钮的使用返回到添加页面。但这是一个解决方案是可怕的。

0

我的问题是你为什么要在会话中存储任何东西以开始?如果您可以避免在会话中存储任何内容,我认为您完全可以更好。

0

已经想过这个,做以下听起来像一个体面的解决方案,我上面列出的问题?

  • 首次添加记录时,存储添加页面在隐藏字段中访问时间的时间戳。
  • 当用户单击保存时,此时间戳会通过会话。随身份证。
  • 如果用户同时打开另一个选项卡并保存,则新页面的时间戳会通过会话。
  • 如果用户试图访问第一个记录(使用后退按钮)的添加页面时,系统查找会议,并认为如果有一个时间戳,以及它是否符合一个在该页面的隐藏字段。
  • 如果不匹配,那么用户会得到提示,并被告知要正确编辑记录。

这听起来是合理的,否则太过于复杂?

相关问题