我在 ASP.net 中编写了一个应用程序,旨在让用户将记录添加到数据库中。页面设置为,当用户添加一条记录时,在session中设置新添加记录的ID号,页面Response.Redirect到“感谢您提交”页面,然后重定向回原来的页面以允许进一步编辑。用户还可以使用此屏幕上的“后退”按钮返回到原始记录添加页面,这允许他们对数据进行编辑。

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

有什么解决办法吗?

有帮助吗?

解决方案

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

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

这会得到下列流 添加 - > [发布] - >编辑 - > ..... 添加 - > [发布] - >编辑 - > [后退按钮] - >添加 - > [发布] - >编辑 - > [发布] - >编辑...

其他提示

我建议你存储的查询字符串的ID。记录添加后,重定向到你的“三江源”页面,然后我猜包含一个链接到编辑表单,你将与查询字符串的ID生成。当链路是其次,编辑页面shouild拉ID出来的查询字符串,以便加载正确的记录进行修改。

您添加和编辑的形式,甚至可以在同一个页面,当在查询字符串提供一个ID,你的表格知道要编辑的记录,否则你的形式增加了一个新的记录。

您是否尝试过在查询字符串添加ID?然后,你可以读它,并根据需要将其添加到会话(上单击后退按钮的用户说了)。

好像很多的允许使用后退按钮时呈现的页面的对象的编辑的问题。难道是太多了,给他们的编辑按钮呢?

在控制保存在ViewState它们的状态。如果您选择使用SessionState的,而不是ViewState中存储的信息,然后控件将保存其状态的会话状态,它不会与多个标签正常工作。

我还没有找到一种方法,同时仍使用SessionState的绕过这个问题。我们的解决方案是使用正常视图状态。

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

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

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

我对你的是你为什么要存储开始与会话什么问题?如果你能避免在会话存储任何东西,我想你会完全关闭好。

考虑到这一点,以下内容听起来是否是我上面概述的问题的一个不错的解决方案?

  • 首次添加记录时,将访问添加页面的时间戳存储在隐藏字段中。
  • 当用户单击“保存”时,该时间戳将通过会话传递。连同身份证一起。
  • 如果用户同时打开另一个选项卡并保存,则新页面的时间戳将通过会话传递。
  • 如果用户尝试访问第一条记录的添加页面(使用后退按钮),系统会查找会话,查看是否有时间戳,以及它是否与该页面的隐藏字段中的时间戳匹配。
  • 如果不匹配,则用户会收到提示,并被告知正确编辑记录。

这听起来合理还是过于复杂?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top