【问题标题】:Elegant way to implement manipulating temporary storage - ASP.NET实现操作临时存储的优雅方式 - ASP.NET
【发布时间】:2009-03-25 21:27:54
【问题描述】:

我有一个用户控件,在加载时我有一些来自数据库的数据。用户可以以不同的方式(CRUD)操作数据。操作数据的过程可能会导致服务器端事件或客户端事件。然后页面上有一个保存按钮,最终处理临时数据并写入数据库。

我正在寻找一种优雅的方法来解决这个问题。我的想法是:

  • 加载时,使用隐藏变量并将数据(此时以自定义数据结构的形式)序列化为 JSON
  • 在任何操作数据、反序列化、执行操作并序列化回隐藏变量的事件(服务器端/客户端)上
  • 在最终保存时,反序列化为首次加载的数据结构并访问数据库

由于所有这些都发生在 ASCX.CS 中,我不能真正使用很酷的 OOP 东西(如果将来他们决定这些操作不应该在临时存储中完成,而是在数据库中完成,那么对于多态性)

我几乎被一个类的方法所困扰,它有一堆静态方法,每个操作都有一个方法。在后面的代码中,当有需要处理的事件时,我必须对数据进行序列化/反序列化。

编辑 - 有什么帮助吗?

【问题讨论】:

    标签: c# asp.net json


    【解决方案1】:

    ADO.Net。 在内存数据结构中,您只需在进程结束时提交。

    【讨论】:

    • 通过 ADO.NET 结构,我假设您的意思是数据集。由于这些操作可能发生在客户端或服务器端,我仍然需要使用相同的方法将 DS 持久化到 Viewstate 对象中。
    • 选择一个位置。不是客户端和服务器。您应该将信息发送回服务器,更新服务器上的模型,然后从该调用中取回修改后的局部变量并存储它。这样,您只需维护一个代码库来进行数据操作。
    【解决方案2】:

    最简单的方法可能是在页面第一次加载时将对象存储在视图状态中,让用户对其进行操作,然后在用户想要保存它时将其保存回数据库。

    但是,这种方法的一个问题是,如果多个用户同时编辑同一个项目,您最终可能会遇到数据被覆盖的情况。

    例如。

    1) 用户 A 加载页面并开始进行更改 2) 用户 B 加载页面并开始进行更改 3) 用户 A 按保存。更改保存到数据库 4) 用户 B 按保存。更改保存到数据库,覆盖用户 A 的更改。

    您可以通过使用时间戳来保存上次更新的日期和时间,并在提交 udpate 之前将其与视图状态中的日期和时间进行比较来解决此问题。或者,您可以在有人开始编辑时锁定该项目,阻止两个人同时进行更改,但这种解决方案可能不太可靠(例如,如果用户在编辑时离开页面会发生什么情况)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-28
      • 2021-03-05
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2014-05-15
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多