3

假设您检索 100 条记录,并将它们显示在页面上。用户仅更新页面上的 2 条记录。现在您只想更新两条记录,而不是其他 98 条记录。

最好在页面上提交一个,然后以某种方式知道哪两个已更新,然后仅将这两个发送到数据库进行更新?

“不知何故”是什么样子的?

或者,您是否会为每一行设置一个更新提交按钮,并让它只更新与其关联的记录?

4

5 回答 5

1

当然,有不同的方法可以做到这一点。一般来说,您可以通过使用 Javascript 仅针对已更改的记录组装您的 POST 数据来节省一些麻烦和服务器端处理。关于这可能如何工作的两个想法:

1)走ajax路线并进行实时编辑。因此记录显示在表格中,并且似乎不可编辑。当用户单击特定行时,该行变为可编辑的,方法是使用 Javascript 动态创建适当的 html 表单。然后有一个提交按钮或其他一些处理程序(例如,将焦点移动到另一个表行),这将触发更新数据库的 POST(通过您首选的 ajax 方法异步)。令人高兴的是,主流 Javascript 框架可以在这方面提供很多帮助。

2) 复选框 - 每当编辑一行时,它的复选框就会被选中。单击提交按钮时,使用 javascript 通过抓取选中复选框的行中的所有内容来发布 POST 数据。用户可以在提交之前取消选中一个框以取消对该行的更改。

于 2009-03-06T22:02:24.550 回答
0

使用 jQuery 或其他一些 JavaScript 库对其进行 Ajax,并在每一行上放置和更新按钮。

于 2009-03-06T21:58:54.187 回答
0

这个问题有很多答案,在某种程度上,它们取决于您的开发工具和网站的“感觉”。

如果您正在实现 Ajax 调用以逐行进行更新,那么从逻辑上讲,每行都有一个按钮,然后在更改行时使用 Ajax 调用对其进行更新,这在逻辑上似乎是正确的。

这也只是断开数据集旨在解决的场景,而 ADO.net 可以很好地处理这些问题。

因此,与以往一样,答案是“视情况而定!”

于 2009-03-06T21:59:32.950 回答
0

当用户更改输入字段时,您可以使用 JavaScript 将每个字段标记为已更改。创建一个隐藏字段,其中包含您要更新的行的 id 和脏标志。(如 is_dirty_$id) 在 JavaScript 中,创建一个 onChange 处理程序,将隐藏字段设置为脏。当任何输入发生变化时。

或者,您可以为您显示的每个真实字段创建隐藏字段。隐藏字段将包含初始值。检查服务器端的每个字段以确定发生了什么变化。

您可能希望将 last_modified 日期存储为每条记录的隐藏字段。这样,如果另一个用户更新了相同的记录,您可以显示一条错误消息,指出“此记录已被另一个用户更新”或类似的信息。

于 2009-03-06T22:01:38.750 回答
-1

一个提交按钮。我可以预见我可能会使用不止一个,但在一般情况下只使用一个。(注意,这对我来说看起来像是一个网页问题,所以我用这个假设来回答。)

您可以想到 3 种方法可以处理跟踪更改:

JavaScript:在更新隐藏字段的控件上放置一个 onChange() 函数。如果该隐藏有一个值,则更新关联的记录。在浏览器上需要 JS,并且不会告诉您要更新哪些字段,只告诉您哪些记录。

大量表单字段:每个控件都放置一个隐藏字段,并在它们返回时进行比较。这会很难看,但它可以让您知道要更新哪些字段(不仅仅是记录)。它还可以让您知道是否有人撤消了开始的更改。

会话:您可以将原始值放在会话变量中,然后在值返回时进行比较。这将比许多隐藏字段更优雅一些,并且对玩回传数据的人不那么开放(因为你永远不应该相信任何返回的东西,即使是在隐藏字段中)。需要浏览器上的 cookie 和服务器技术上的会话。

于 2009-03-06T21:58:28.600 回答