c# - 多个浏览器选项卡中的 asp.net Web 表单
问题描述
我在网格视图中有一个网格视图和一个编辑按钮。在编辑按钮上单击我正在打开一个新的 aspx 页面,其中包含用于输入数据的文本字段。当用户复制 gridview 的 URL 并在任何浏览器的新选项卡中打开它时,然后单击两个不同记录的编辑按钮。如果用户更改第一个选项卡中的任何内容并提交。它会更改第二个选项卡上记录的信息。发生这种情况是因为我将会话中的用户 ID 传递给表单 aspx 页面,并且当用户在新选项卡中打开第二条记录时会话得到更新。
是否只有两种方法可以将数据传递到 aspx 页面?
- 使用会话
- 使用查询字符串
我不想使用查询字符串。请帮忙谢谢。
解决方案
您正在编写一个 ASP.Net 应用程序,所以最终您能做的只有这么多。您可以通过浏览器请求一些东西,但如果他真的这样做,这完全取决于它。
您可以使用HTML Links 目标属性使其不太可能意外发生。这要求浏览器重新使用该记录的任何已打开的选项卡。但这不会阻止专职人员仍然打开 2 个副本。
一般来说,避免竞争条件的一种非常简单的方法是SQL rowversion列。您与其余部分一起检索行版本。您将它保存在一个隐藏的公式字段中(这就是它们的用途)。写入更新时,在写入之前检查它是否仍然匹配。如果是,你更新。如果不是,那么从那时起有人修改了记录,而您拒绝更新。可以是另一个选项卡中的同一用户,也可以是世界尽头的另一个用户。可能是这个标签是一年前打开的,在睡眠模式下存活。没关系 - 任何更改都会触发此保护。
推荐阅读
- dependencies - 为什么构建自定义 nginx/ModSecurity RPM 会导致 Perl 依赖项损坏?
- python - 以全处理器能力运行music21
- python - UnicodeDecodeError:在 Python 中读取文件名时的连续字节无效
- xcode - pod 安装后找不到“XXX”文件
- php - 将图像路径存储到多个图像的文本框中
- javascript - 我正在使用带有 Angular 2 的 Google Maps 自动完成功能,想要以阿拉伯语检索值
- java - 使用 lambda 表达式和供应商/消费者时出现 java.lang.ClassCastException
- sql-server - 在 Automator 上以 32 位运行 SQL Server 代理作业
- arrays - 如何计算我的字符串数组并使用字符串
- java - Java 线程安全代码