我在ASP.net中编写了一个应用程序,旨在让用户将记录添加到数据库中。页面设置为当用户添加记录时,新添加的记录的ID号在会话中设置,页面Response.Redirects到“感谢您提交”页面,然后重定向回原始页面以允许进一步编辑。用户还可以使用此屏幕上的“返回”按钮返回原始记录添加页面,这样他们就可以对数据进行编辑。
但是,我发现在会话中存储ID并不是一个非常好的解决方案,因为用户可能会尝试在不同的选项卡或窗口中创建两个文档。我也尝试在文字控件中设置ID,但这会导致以下问题:当用户使用“返回”按钮时,文字控件未设置为ID,并且添加了新记录而不是正在编辑的记录。
对此有什么解决方案吗?
答案 0 :(得分:5)
我建议您将您的ID存储在QueryString中。添加记录后,重定向到“thankyou”页面,然后我猜测该页面包含一个指向编辑表单的链接,您将使用查询字符串中的ID生成该表单。当遵循该链接时,编辑页面应该从查询字符串中提取ID,以便加载要编辑的正确记录。
您的添加和编辑表单甚至可以是同一页面,当查询字符串中提供了ID时,您的表单知道要编辑该记录,否则您的表单会添加新记录。
答案 1 :(得分:1)
您是否尝试在查询字符串中添加ID?然后你可以阅读它,并根据需要将它添加到会话中(比如用户点击后退按钮)。
似乎很多问题允许在使用后退按钮时编辑页面中的对象。改为给他们一个编辑按钮是不是太过分了?
答案 2 :(得分:1)
愚蠢的问题,为什么用户可以使用后退按钮编辑帖子中刚刚接受的数据?
如果编辑以前发布的数据是一种常见的情况,为什么不只是在接受数据时重定向到页面,让他们编辑它。然后,如果按下后退按钮,他们将返回到原始的“干净”插入/添加新数据页。
这将提供以下流程 添加 - > [发布] - GT;编辑 - > ..... 添加 - > [发布] - >编辑 - > [后退按钮] - >添加 - > [发布] - >编辑 - > [发布] - >编辑....
答案 3 :(得分:0)
控件将其状态保存在ViewState中。如果您选择使用SessionState而不是ViewState来存储信息,那么控件将在会话状态中保存其状态,并且它将无法与多个选项卡一起正常工作。
在使用SessionState时,我还没有找到绕过此问题的方法。我们的解决方案是使用普通的ViewState。
答案 4 :(得分:0)
我已经尝试将ID存储在查询字符串中(这对于编辑很好),但问题是当信息存储在会话中时他们使用“后退”按钮。如果用户执行以下操作:
这可能是一个牵强附会的场景,但它可能会发生。我唯一的解决方案是使用JavaScript中的window.history.forward()阻止使用Back按钮返回添加页面。但这作为解决方案很糟糕。
答案 5 :(得分:0)
我的问题是你为什么要在会话中存储任何内容?如果您可以避免在会话中存储任何内容,我认为您将会更好。
答案 6 :(得分:0)
考虑到这一点,以下听起来像是我在上面概述的问题的合理解决方案吗?
这听起来合理,还是过于复杂?